WDK 8 のドライバー開発の新機能

ひさかたぶりです。まさかたです。

 

先日、ついに Windows 8 が発売されました。巷では、各メーカー様から発売された様々な Windows 8 対応のデバイスが並んでおり、どれを購入しようか目移りしてしまいますね。

そして、Windows Driver Kit 8 については、先日のなおきお~さんの記事でも書かれていましたように、既にリリースされておりますが、皆様、使いこなしていらっしゃいますでしょうか?

ご存知の通り、WDK 8 は Visual Studio 2012 に統合され、Intellisense などの従来の Visual Studio の便利な機能が使えるようになった他に、WDK 8 のドライバー開発に特化した便利な機能がいくつか追加されております。

WDK 8 で何が新しくなったのかをお知りになりたい場合は、まずは以下のリンクから見ていただくのがよろしいかと思います。

 

Windows 8 の新機能

https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh451220(v=vs.85).aspx

 

そんな中で、今回は、私が使う中でこれは便利だなと思ったものとして、ビルドしたドライバーの動作確認をする際に役立つ機能を、簡単にご紹介させていただきたいと思います。

それは、Visual Studio が自動的に、① ビルドしたドライバーパッケージの INF からカタログ ファイルを生成し、② カタログ ファイルにテスト署名をした上で、③ テスト用の PC にインストールしてくれるという機能です。今までこれらの手順は、ドライバーをビルドし直す度に、手動で行う必要があったかと思いますが、WDK 8 では、これらの作業は全て自動的に行うことができるようになりました。これなら、ドライバーを手元で動作確認する場合にもとても便利です。

 

というわけで、さっそく具体的なやり方を順に追って見てみましょう。今回も、例によって Toaster サンプルを例に取って見てみたいと思います。サンプルコードの取得方法が分からないという方は、先日のなおきお~さんの記事をご参照ください。

さて、まずは Toaster のソリューション (toaster.sln) を開きます。そして、ビルドしたドライバーに、上記の ①、②、③ の設定のために、Package プロジェクトのプロパティを開きます。

 

clip_image001

 

Package のプロパティを開くと、以下のような画面が表示されますが、注目すべきは以下の赤い四角で囲んだ個所です。

 

clip_image003

 

上記の ① ~ ③ は、それぞれプロパティページの各項目と、以下のように対応しています。

① INF から Catalog ファイルを作成 => Inf2Cat

② テスト署名の作成と署名の実施 => Driver Signing

③ テスト環境上にドライバーパッケージを展開、インストール => Driver Install

 

以下では、さらに ① ~ ③ の順で、設定の詳細を見てみます。

 

INF から Catalog ファイルを作成 (Inf2Cat)

Inf2Cat のプロパティでは、ドライバーをビルドした際に、INF ファイルに記載の CatalogFile ディレクティブから、inf2cat.exe ツールを使って自動的にカタログファイルを生成するかどうかや、生成する際の細かな設定を行うことができます。

既定の設定では、"Run Inf2Cat" が "はい" になっており、Inf2Cat でカタログファイルを生成するようになっています。

 

clip_image004

 

設定の細かな点は、末尾の [参考] に記載した技術情報を見ていただければと思いますが、特に "Use Local Time" については、"はい(/uselocaltime)" にしておくことをお勧めいたします。というのも、これを設定していない場合、INF の Version の日付が、標準時 (UTC) と比較しておかしな値でないか、つまり UTC での日付に比べて、INF の日付が未来や極端に過去になってないかをチェックします。

特に StampInf のプロパティで、"Enable DataStamp" を有効にしている場合、INF ファイルの Version の日付を自動的に現在の日付に更新してくれるのですが、通常 UTC は日本時間より遅れます (日本時間は UTC+9:00) 。そのため、ビルドのタイミングによっては、INF の Version の日付が、UTC の日付より先の日付になってしまい、エラーと判断されてしまう場合がありますので、ご注意ください。

 

clip_image005

 

 

テスト署名の作成と署名の実施 (Driver Signing)

Driver Signing のツリーを開くと以下のようなページとなっております。ここでは、署名に使用する証明書を選択することが可能です。当然、テスト署名を選択することも可能です。

clip_image006

 

テスト署名を行うためには、"Sign Mode" は "Test Sign" を選択いただき、さらにテスト証明書を新たに作る場合には、"Test Certificate" で " <Create Test Certificate …>" を選択していただければ、新たなテスト証明書が自動的に作成されます。

 

clip_image007

 

テスト環境上にドライバーパッケージを展開、インストール (Driver Install)

こちらの手順は少々長いです。まず、Package プロジェクトのプロパティから、"Driver Install" を選択すると下記のようなページが表示されます。

clip_image008

 

既定の設定では、ドライバーの展開は行わないようになっていますが、ここでは展開をしてみたいと思いますので、"Enable Deployment" のチェックボックスをオンにします。併せて、繰り返しビルドしてインストールすることを想定して、"Remove previous driver versions before deployment" にもチェックを入れておきます。

すると、さらに "Target Computer Name" のボックスを操作できるようになりますので、ここから、ドライバーの展開先のテスト PC の情報を入力していくことになります。

 

clip_image009

 

上記の画面で " <Configure Computer …> " を選択すると、下記のダイアログボックスが表示されます。なお、下記の画面は Visual Studio の [DRIVER] メニューから、[Test] -> [Configure Computer] を選択することでも表示することができます。

 

clip_image010

 

次に上記の画面で "Add New Computer" ボタンをクリックします。すると、さらに以下のダイアログが表示されますので、"Computer name: " の個所に、テスト PC のコンピュータ名を入力します。

 

clip_image011

 

なお、このテスト用の PC は、事前に以下の条件を満たしておく必要があります。

· Administrator アカウントが有効になっており、Administrator としてログオンしている

· Network Discovery (ネットワーク探索) や File and printer sharing (ファイルとプリンターの共有) が有効になっている

· Visual Studio のインストールされた開発環境と同じネットワーク上に接続されている

· 名前解決されており、開発環境 PC から Ping での通信が可能

今回の例では、Windows 8 RTM のインストールされた "masakata-v8rtm" というのを入力して、次へ 進みます。

clip_image012

 

すると、以下のような画面になり、テスト用 PC に接続を開始します。

 

clip_image013

 

すると、テスト PC に接続するための Administrator のアカウント情報の入力を求められますので、入力してさらに待つと、テスト PC 上で自動的に "WDKRemoteUser" という名前のユーザーが作成されます。

 

clip_image014

 

そして、テスト PC に必要な様々なコンポーネントのインストールや設定が行われていきます。

 

clip_image015

 

その内、テスト PC が再起動されたりもしますが、びっくりしないでください。

 

clip_image016

 

最終的には、以下のようなメッセージが表示され、次に進めるようになります。

 

clip_image017

 

そして、次に進むと、Network デバッグの構成情報、結果の Summary が表示され、準備は完了です。

 

clip_image018

 

すると、当初の Package のプロパティページに戻ってきますが、今度は "Target Computer Name: " が、先ほど入力したテスト PC のコンピュータ名になっていると思いますので、ついでに Driver Installation Options も、既定の "Do Not Install" から、試しに "Install and Verify" にしておきます。

 

clip_image019

 

以上を持って、取り急ぎの設定は完了ですので、OK ボタンをクリックして、Package プロパティのページを閉じます。

そして、いよいよソリューションをビルドします。ビルドに成功すると、出力ウィンドウに最終的に以下のようなメッセージが出力され、カタログファイルの作成や、カタログファイルへの署名、さらに、ドライバーファイルがテスト PC に展開されたことが分かります。

 

clip_image020

 

上記のドライバーファイルの展開が行われている間、テスト PC 上では以下のようにドライバーのインストールと検証 (Install and Verify) が自動的に行われる様子を見ることができます。

 

clip_image021

 

さて、それでは、実際にテスト PC にドライバーがインストールされているか確認してみると、確かにインストールされていることが確認できます。また、署名も Visual Studio で作成したテスト証明書で行われていることが確認できます。

 

clip_image022

 

ドライバーパッケージも、Driver Store にもきちんとステージングされていることが確認できますし、当然カタログファイルにも署名がされております。

 

clip_image023

 

埋め込み署名もばっちりです。

 

clip_image024

 

証明書も、証明書ストアにきちんとインポートされております。

 

clip_image025

 

clip_image026

 

ちなみに、ドライバーパッケージの署名に使われたテスト証明書は、ビルドされたバイナリの格納された Package フォルダと同じ場所に package.cer という名前でコピーされておりますので、手動で証明書を使いたい場合には、こちらをご利用いただければと思います。

 

clip_image027

 

以上、WDK 8 の便利な機能のご紹介でした。皆様のお役に立ちましたら幸いです。

それではまた。

 

 

[参考]

ドライバーの開発、テスト、および展開

https://msdn.microsoft.com/ja-jp/library/windows/hardware/ff554651(v=vs.85).aspx

 

ドライバー パッケージプロジェクトの Inf2Cat プロパティ

https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh825932(v=vs.85).aspx

 

開発中とテスト中のドライバーへの署名

https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh967733(v=vs.85).aspx

 

テスト コンピューターへのドライバーの展開

https://msdn.microsoft.com/ja-jp/library/windows/hardware/hh454834(v=vs.85).aspx

 

ドライバーの展開、テスト、およびデバッグ用のコンピューターの構成

<https://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=JA-JP&k=k(WindowsDebuggingWizardTroubleshooting)&rd=true>