SCIENCE PARK

デバドラ講座

【 デバドラ講座5 : WDKのサンプルをビルドしてみよう 】

1.環境構築

ドライバを作成するための環境を作りましょう。MicrosoftはWDK(Windows Driver Kit)というドライバ開発に必要となるツールを提供してくれています。

http://msdn.microsoft.com/ja-jp/windows/hardware/hh852365.aspx

WDKを使用してドライバのサンプルをビルドするには、まずPCにビルドできる環境を作らなければなりません。下記のソフトウェアをインストールします。

  1. 開発環境:Visual Studio(2012以降)
  2. WDK 8.1(OSがWindows7以上の場合。)
  3. サンプルコード(以下のURLから「C++」をダウンロード)

http://code.msdn.microsoft.com/windowshardware/Windows-8-Driver-Samples-5e1aa62e

2.PortIOドライバをビルドする(WDK 8以上)

最新版のWDKはVisual Studioを使用して、ドライバ、アプリをビルドします。今回は「PortIO」ドライバを例としてビルドします。ビルドの手順は以下の通りです。

Ⅰ. 「Windows Driver Kit(WDK)8.1 Sample.zip」を開く。

環境準備でダウンロードした「Windows Driver Kit(WDK)8.1 Sample.zip」を開きます。

Ⅱ. 「PortIO Sample Driver\C++」の中のportio.slnを開く。

zipファイルの中の「PortIO Sample Driver\C++」の中のportio.slnをVisual Studioで開きます。

図1:portio.slnファイル場所
図1:portio.slnファイル場所

Ⅲ. 作成したい環境のビルド構成を選択し、ビルドする。

作成したい環境のビルド構成を選択し、ビルドします(図2、図3)。図の環境はWindows8 x64なので、ソリューション構成が「Win8 Debug|x64」を選択しています。また、ビルドを実行する際は、環境に対応したWDKが必要となります。ビルドに成功すると、genport.sys、genport.inf、gpdread.exe、gpdwrite.exeが、以下のパスに作成されます(表1)。

図2:ビルド手順①
図1:ドライバファイル
図3:ビルド手順②
図3:ビルド手順②
表1:各モジュールが作成される場所
作成されるパス
genport.sys、genport.inf ...\C++\sys\(対応bit数)\(対応する環境のフォルダ)\
gpdread.exe ...\C++\gpdread\(対応bit数)\(対応環境名のフォルダ)\
gpdwrite.exe ...\C++\gpdwrite\(対応bit数)\(対応環境名のフォルダ)\

3.サンプルデバイスドライバのインストール(WDK 8以上)

  1. 上記でビルドしたgenport.sys, gpdwrite.exe, gpdread.exe を1つのフォルダに入れ、genport.infも同じフォルダに収めます。
  2. Windowsボタン+Rで「ファイル名を指定して実行」を開き、"hdwwiz.exe"と入力してEnterを押します。
  3. 起動したハードウェアの追加ウィザードを使用して手順①で用意したフォルダを指定し、ドライバをインストールします。

※ドライバは署名無しには動きません。WDKのサンプルには全てテスト署名がつく設定になっていますので、OSをテストモードで起動すればサンプルのドライバが動作します。ドライバを自作する場合の署名の付け方は以下を参考にしてください。

「ドライバーのデジタル署名の基礎」Japan WDK Support Blog
http://blogs.msdn.com/b/jpwdkblog/archive/2011/08/29/10201505.aspx

4.PortIOドライバをビルドする(旧版WDK)

参考として、WindowsXP以前のドライバのビルド方法も以下に記載しておきます。旧版ではVisualStdioを使用せず、WDKを使用してドライバをビルドします。以下はOSが7で、WDKのバージョンが7600.16385.1の環境を使用しています。

Ⅰ. サンプルファイルの準備

図4の場合、WDKがC:\WinDDK\7600.16385.1\src\general\portioの中のsys、gpdwrite、gpdreadのファイルの中にそれぞれgenport.c、Gpdwrite.c、Gpdread.cがあることを確認します。WDKをインストールした場所、バージョンにより、\src....の前の部分は変わります。

図4:PortIO Sample Driver 中身
図4:PortIO Sample Driver 中身

II. ドライバのビルド

[スタート]→[すべてのプログラム]→[Windows Driver Kits]→[Build Environments]→[Windows 7(対象環境)]→[x64 Free Build Environment(対象環境)]の順でWDKを起動します。(図5)個々の環境によってはこの手順と違うスタートメニューからの表示が異なる場合があります。

図5:ビルド画面の立ち上げ
図5:ビルド画面の立ち上げ

III. サンプルコードをビルドする

WDKを起動すると図6の画面が表示されます。ビルドしたいファイルが含まれるフォルダに移動します。ここではgenport.cをビルドします。"cd src\general\portio\sys"とタイプし、移動し、"build"とタイプすることでビルドが開始されます。ビルドが終わるとビルドされたソース数、リンク数が表示されます。同様にgpdwrite.c、gpdread.cをビルドすることができます。

図6:ビルド画面
図6:ビルド画面

Ⅳ. サンプルコードがビルドされたかを確認

サンプルコードが実際にビルドされたかを確認するために、サンプルコードがあったファイルに移動します。そこから"..sys\objfre_win7_amd64\amd64"に移動し、ビルドに成功していれば、そこにビルドされたファイルが生成されています。図7で、genport.sysが生成されているが確認できます。同様にして、gpdwrite.exe, gpdread.exeが生成されていることを確認します。

図7:ビルドされたドライバ
図7:ビルドされたドライバ

参考資料

Kernel Mode Systems Jamie E. Hanrahan "Driver Development Environment"
http://www.cmkrnl.com/faq03.html
page up