Visual Studio 2015 でのテスト署名方法
今回は、Visual Studio 2015 でのテスト署名方法とx64 版のOS でインストールして動作するところまでの手順をご紹介します。
と言っても、WDK で提供されているサンプルはたいてい自動的にテスト署名されることが多いため、テスト署名の方法そのものは、通常はあまり意識する必要がないかもしれません。そのため、テスト署名をされた際に、インストールがうまくいかない場合に、正しい手順との比較がしたい、というような目的としても、今回のブログエントリをご参考にしていただけると幸いです。
今回は、例として、「NDIS Virtual Miniport Driver (netvmini) サンプルをインストールする」でご紹介した、NDIS Virtual Miniport Driver (netvmini) サンプルにテスト署名をし、x64 のOS であるWindows Server 2016 にインストールしたいと思います。サンプルをビルドする、開発側のPC はWindows 10 (1703) x64 にVisual Studio 2015 とWDK 10 がインストールされています。
なお、テスト署名の説明そのものは「ドライバーのデジタル署名の基礎」、Visual Studio を使わずに、コマンドからテスト署名する方法については、以前のブログエントリ「INFファイルを記述する」もしくは、以下のドキュメントをご参照いただければ幸いです。
Test Signing
/en-us/windows-hardware/drivers/install/test-signing
1. サンプルの入手
NDIS Virtual Miniport Driver (netvmini) サンプルは、以下のサイトの右側の緑色の [Clone or Download] ボタンを押すと表示される [Download ZIP] ボタンでWindows-driver-samples-master.zipをダウンロードすると、Windows-driver-samples-master\network\ndis\netvmini\6x のフォルダにあります。
https://github.com/Microsoft/Windows-driver-samples
2. サンプルのビルドの準備
このnetvmini\6x フォルダのnetvmini.sln を、Visual Studio 2015 で開きます。
[ ソリューション ‘netvmini’] を右クリックして [構成マネージャー] をクリックします。
今回は、[アクティブソリューション構成] を [Debug] 、[アクティブ ソリューション プラットフォーム] を [x64] とします。また、今回はnetvmini630 (NDIS 6.30) のプロジェクトを使いたいと思いますので、netvmini60 とnetvmini620 の[ビルド] のチェックボックスは外します。
3. テスト署名の設定
さて、テスト署名を行うために、プロジェクトnetvmini630 を右クリックして[プロパティ] を開き、[構成プロパティ]-[Driver Signing]-[General]-[Sign Mode] が [Test Sign] であることを確認します。また、[Test Certificate] をブランクのままにしておく(テスト証明書を指定しない) ことで、デフォルト動作として、新規にテスト証明書が作成されます。
続いて、[構成プロパティ]-[Inf2Cat]-[General]-[Run Inf2Cat] が [はい] であることを確認します。
なお、[Use Local Time] を [はい] にすることで、INF ファイルのDriverVer ディレクティブのチェック対象のタイムゾーンを、デフォルトの UTC から日本時間に変更しておきます。
UTC と日本時間は時差が9時間ありますので、UTC のままの場合、日本でビルドした日付がUTC よりも一日早まる時間帯があります。これによりInf2Cat のSignability test で以下のエラーが発生しますが、上記の変更を行っておくことで、このエラーを避けることができます。
22.9.7: DriverVer set to a date inthe future (postdated DriverVer not allowed) in\netvmini630.inf. |
4. サンプルのビルド
[ソリューション ‘netvmini’] を右クリックして [ソリューションのリビルド] をクリックします。\netvmini\6x\630\Debug\netvmini630 フォルダに以下の3 つのファイルができます。
netvmini630.cat
netvmini630.inf
netvmini630.sys
また、一階層上の、\netvmini\6x\630\Debug\ フォルダにnetvmini630.cer というテスト証明書ができます。
ここで、netvmini640.cat を右クリックして[プロパティ] をクリックすると、以下のように[デジタル署名] のタブができており、カタログファイルにテスト署名されたことが確認できます。
同様に、netvmini630.sys を右クリックして[プロパティ] をクリックすると、こちらも以下のように[デジタル署名] のタブができており、ドライバファイルにもテスト署名されたことが確認できます。
5. テスト証明書のインストール
今回動作確認するOS は、Windows Server 2016 です。これが入っているターゲットPC にC:\netvmini630 というフォルダを作り、前述のビルドしてできた4 つのファイルをコピーします。
また、テスト証明書のインストールのために、WDK 10 がインストールされている開発側のPC の \Program Files (x86)\Windows Kits\10\bin\x64 にある、certmgr.exe を、上記のフォルダにコピーしておきます。
ターゲットPC をテストモードにするために、管理者権限のコマンドプロンプトから、以下のコマンドを実行します。
bcdedit /set testsigning on |
OS を再起動します。
ログインして、画面右下に「テスト モード」と表示されていることを確認します。
テスト証明書を[信頼されたルート証明機関] と[信頼された発行元] の証明書ストアにインストールするために、管理者権限のコマンドプロンプトから、以下のコマンドを実行します。
// [信頼されたルート証明機関] の証明書ストアにインストール certmgr.exe /add netvmini630.cer /s /r localMachine root
// [信頼された発行元] にインストール certmgr.exe /add netvmini630.cer /s /r localMachine trustedpublisher |
これを実行すると、certlm.msc で、以下のように、テスト証明書が[信頼されたルート証明機関] と[信頼された発行元] の証明書ストアにインストールされたことを確認できます。
6. サンプルのインストール
[ スタート] を右クリックして [デバイスマネージャー] をクリックします。
メニューの[操作] から [レガシ ハードウェアの追加] をクリックします。(表示されない場合は、PC 名やデバイスクラスなど、任意の場所をクリックしてください。)
ハードウェアの追加ウィザードが開きます。
[ 次へ] をクリックし、 [一覧から選択したハードウェアをインストールする] を選択して [次へ] をクリックします。
[ ネットワーク アダプター] を選択して [次へ] をクリックします。
右下の [ディスク使用] をクリックします。
[ 参照] ボタンをクリックして、C:\netvmini630 フォルダのnetvmini630.inf を選択し、 [開く] をクリックします。
以下の画面で [OK] をクリックします。
以下の画面で、ドライバが署名されていると認識されています。 [次へ] をクリックしていきます。
警告もエラーもなく完了し、以下の画面が表示されましたので、テスト署名でのインストールが問題なくできたことを確認できました。 [完了] をクリックします。
7. デバイスマネージャーでの確認
[デバイス マネージャー] の画面に戻るので、[ネットワーク アダプタ―] の下を見てみると、今回のサンプル[Virtual Ethernet Adapter (NDIS 6.30)] がインストールされたことが確認できます。
今回ご紹介する手順は以上です。
参考文献
Test Signing
/en-us/windows-hardware/drivers/install/test-signing
How to Test-Sign a Driver Package
/en-us/windows-hardware/drivers/install/how-to-test-sign-a-driver-package
Inf2Cat Properties for Driver Package Projects
/en-us/windows-hardware/drivers/develop/inf2cat-properties-for-driver-package-projects
Signing a Driver During Development and Testing
/en-us/windows-hardware/drivers/develop/signing-a-driver-during-development-and-testing
Driver Signing Properties
/en-us/windows-hardware/drivers/develop/driver-signing-properties
Installing Test Certificates
/en-us/windows-hardware/drivers/install/installing-test-certificates
以上の内容がお役に立ちましたら幸いです。
WDK サポートチーム 津田