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 プロジェクトのプロパティを開きます。
Package のプロパティを開くと、以下のような画面が表示されますが、注目すべきは以下の赤い四角で囲んだ個所です。
上記の ① ~ ③ は、それぞれプロパティページの各項目と、以下のように対応しています。
① INF から Catalog ファイルを作成 => Inf2Cat
② テスト署名の作成と署名の実施 => Driver Signing
③ テスト環境上にドライバーパッケージを展開、インストール => Driver Install
以下では、さらに ① ~ ③ の順で、設定の詳細を見てみます。
① INF から Catalog ファイルを作成 (Inf2Cat)
Inf2Cat のプロパティでは、ドライバーをビルドした際に、INF ファイルに記載の CatalogFile ディレクティブから、inf2cat.exe ツールを使って自動的にカタログファイルを生成するかどうかや、生成する際の細かな設定を行うことができます。
既定の設定では、"Run Inf2Cat" が "はい" になっており、Inf2Cat でカタログファイルを生成するようになっています。
設定の細かな点は、末尾の [参考] に記載した技術情報を見ていただければと思いますが、特に "Use Local Time" については、"はい(/uselocaltime)" にしておくことをお勧めいたします。というのも、これを設定していない場合、INF の Version の日付が、標準時 (UTC) と比較しておかしな値でないか、つまり UTC での日付に比べて、INF の日付が未来や極端に過去になってないかをチェックします。
特に StampInf のプロパティで、"Enable DataStamp" を有効にしている場合、INF ファイルの Version の日付を自動的に現在の日付に更新してくれるのですが、通常 UTC は日本時間より遅れます (日本時間は UTC+9:00) 。そのため、ビルドのタイミングによっては、INF の Version の日付が、UTC の日付より先の日付になってしまい、エラーと判断されてしまう場合がありますので、ご注意ください。
② テスト署名の作成と署名の実施 (Driver Signing)
Driver Signing のツリーを開くと以下のようなページとなっております。ここでは、署名に使用する証明書を選択することが可能です。当然、テスト署名を選択することも可能です。
テスト署名を行うためには、"Sign Mode" は "Test Sign" を選択いただき、さらにテスト証明書を新たに作る場合には、"Test Certificate" で " <Create Test Certificate …>" を選択していただければ、新たなテスト証明書が自動的に作成されます。
③ テスト環境上にドライバーパッケージを展開、インストール (Driver Install)
こちらの手順は少々長いです。まず、Package プロジェクトのプロパティから、"Driver Install" を選択すると下記のようなページが表示されます。
既定の設定では、ドライバーの展開は行わないようになっていますが、ここでは展開をしてみたいと思いますので、"Enable Deployment" のチェックボックスをオンにします。併せて、繰り返しビルドしてインストールすることを想定して、"Remove previous driver versions before deployment" にもチェックを入れておきます。
すると、さらに "Target Computer Name" のボックスを操作できるようになりますので、ここから、ドライバーの展開先のテスト PC の情報を入力していくことになります。
上記の画面で " <Configure Computer …> " を選択すると、下記のダイアログボックスが表示されます。なお、下記の画面は Visual Studio の [DRIVER] メニューから、[Test] -> [Configure Computer] を選択することでも表示することができます。
次に上記の画面で "Add New Computer" ボタンをクリックします。すると、さらに以下のダイアログが表示されますので、"Computer name: " の個所に、テスト PC のコンピュータ名を入力します。
なお、このテスト用の PC は、事前に以下の条件を満たしておく必要があります。
· Administrator アカウントが有効になっており、Administrator としてログオンしている
· Network Discovery (ネットワーク探索) や File and printer sharing (ファイルとプリンターの共有) が有効になっている
· Visual Studio のインストールされた開発環境と同じネットワーク上に接続されている
· 名前解決されており、開発環境 PC から Ping での通信が可能
今回の例では、Windows 8 RTM のインストールされた "masakata-v8rtm" というのを入力して、次へ 進みます。
すると、以下のような画面になり、テスト用 PC に接続を開始します。
すると、テスト PC に接続するための Administrator のアカウント情報の入力を求められますので、入力してさらに待つと、テスト PC 上で自動的に "WDKRemoteUser" という名前のユーザーが作成されます。
そして、テスト PC に必要な様々なコンポーネントのインストールや設定が行われていきます。
その内、テスト PC が再起動されたりもしますが、びっくりしないでください。
最終的には、以下のようなメッセージが表示され、次に進めるようになります。
そして、次に進むと、Network デバッグの構成情報、結果の Summary が表示され、準備は完了です。
すると、当初の Package のプロパティページに戻ってきますが、今度は "Target Computer Name: " が、先ほど入力したテスト PC のコンピュータ名になっていると思いますので、ついでに Driver Installation Options も、既定の "Do Not Install" から、試しに "Install and Verify" にしておきます。
以上を持って、取り急ぎの設定は完了ですので、OK ボタンをクリックして、Package プロパティのページを閉じます。
そして、いよいよソリューションをビルドします。ビルドに成功すると、出力ウィンドウに最終的に以下のようなメッセージが出力され、カタログファイルの作成や、カタログファイルへの署名、さらに、ドライバーファイルがテスト PC に展開されたことが分かります。
上記のドライバーファイルの展開が行われている間、テスト PC 上では以下のようにドライバーのインストールと検証 (Install and Verify) が自動的に行われる様子を見ることができます。
さて、それでは、実際にテスト PC にドライバーがインストールされているか確認してみると、確かにインストールされていることが確認できます。また、署名も Visual Studio で作成したテスト証明書で行われていることが確認できます。
ドライバーパッケージも、Driver Store にもきちんとステージングされていることが確認できますし、当然カタログファイルにも署名がされております。
埋め込み署名もばっちりです。
証明書も、証明書ストアにきちんとインポートされております。
ちなみに、ドライバーパッケージの署名に使われたテスト証明書は、ビルドされたバイナリの格納された Package フォルダと同じ場所に package.cer という名前でコピーされておりますので、手動で証明書を使いたい場合には、こちらをご利用いただければと思います。
以上、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
ドライバーの展開、テスト、およびデバッグ用のコンピューターの構成