So-net無料ブログ作成

[Windows][Driver][64bit]ドライバの64bit化について 後編 [プログラム]

前編はこちら





■コンパイラ環境
Windows Server 2003 SP1 DDK(フリー)
http://www.microsoft.com/japan/whdc/DevTools/ddk/default.mspx
上記ページの
"Windows Server 2003 SP1 DDK のダウンロード [236 MB ISO ファイル]"
をクリックすれば、ISOファイルをダウンロードできるので、
CDに焼くか、Daemon Tool使うかしてインストールできます。

■コンパイル方法
"すべてのプログラム"->Development Kits->
Windows DDK 3790.1830->Build Environments->
Windows Server 2003

・Windows Server 2003 Free x64 Build Environmentを選択
 - 普通はこれを選択。IA-32e,AMD64の場合。
 - この項目で選ぶml64.exeはSP1から入っている。
  SP1前を使っていて相当悩みました。。。orz
・Windows Server 2003 Free IA-64 Build Environmentを選択
- IA-64なんてサーバーくらいでしか使われていないのでこちらを使うことは稀。

コマンドプロンプトが立ち上がったら、コンパイルするフォルダまで移動して、
"build"と打ってEnter押すだけ。(makefileは必要)


==============
★以下、補足。
==============
■__readmsr/__writemsrについて
http://msdn2.microsoft.com/en-us/library/y55zyfdx(VS.80).aspx
ここ見ると組み込み関数っぽく書かれている。
確かにVC2008 Express Edition(フリー)のincludeフォルダにある
intrin.hに記述がある。
が、普通にアプリ側からこの関数読んでも使えない。
上記のMSDNのページにはKenerl Modeでのみ動作するとも書いてあるので、
ドライバ内で呼ぶのだろうか?

しかし、DDKの方を見てみると、wdbgexts.hに
inlineのReadMsr()の記述があるが、これはファイル名から見ても、
windbg用のコマンドに違いない。。。

どうやらDDK 2003 serverではreadmsr/writemsrには対応してないっぽい。
WDKでどうなっているかはわかりません。

で、自分でアセンブラで書こうとしたのですが、
これまた問題が。。。
DDK2003のコンパイラって64bit版はインラインの
アセンブラ(下のようなやつ)に対応していない。
_asm{
}
そんなこんなで、アセンブラ関数作りたい場合は、次の項目で述べてるように、
別ファイルを作成し、コンパイルする必要がある。

■アセンブラを一緒にコンパイルする場合
SOURCESファイルに下記の行を追加
・通常の32bit用のアセンブラファイルの場合
I386_SOURCES = i386\assembly.asm
・IA64用の64bit用のアセンブラファイルの場合
I64_SOURCES = ia64\assembly.s
・IA32e,AMD64用のアセンブラファイルの場合
AMD64_SOURCES = amd64\assembly.asm

実際のファイルはそれぞれ下記のフォルダに置く
・通常の32bit用のアセンブラファイルの場合
objfre_wnet_x86\i386
・IA64用の64bit用のアセンブラファイルの場合
objfre_wnet_IA64\ia64
・IA32e,AMD64用のアセンブラファイルの場合
objfre_wnet_AMD64\amd64





nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。