NDIS Virtual Miniport Driver (netvmini) サンプルをインストールする

今回は、ネットワークアダプタ (または Network Interface Card: NIC) のドライバのサンプル NDIS Virtual Miniport Driver (netvmini) サンプルをご紹介します。   このサンプルは、物理 NIC を必要とせずに、NDIS ミニポートドライバの実装を確認できるサンプルです。ミニポートドライバについては、さなえすさんの以前の記事「Windows の Network Driver」をご参照ください。   今回は、このサンプルをビルドして、ターゲット側 PC の Windows 10 (1607) x86 にインストールし、デバイスマネージャー上で表示されるところまでを確認します。サンプルをビルドする、開発側の PC は Windows 10 (1607) x64 に Visual Studio 2015 と WDK 10 がインストールされています。   1. サンプルの入手   NDIS Virtual Miniport Driver (netvmini) サンプルは、以下のサイトの右側の緑色の [Clone…


Microsoft ASL Compiler (asl.exe) を使ってみる

今回は、Microsoft ASL Compiler (asl.exe) を使って、BIOS の ACPI テーブルを編集する手順をご紹介したいと思います。   Microsoft ASL Compiler (asl.exe) は、システム上の種々の ACPI テーブルの逆アセンブリ、ACPI Source Language (ASL) ファイルのコンパイル等の機能が含まれています。   Microsoft ASL compiler https://msdn.microsoft.com/windows/hardware/drivers/bringup/microsoft-asl-compiler (日本語訳 : https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn551195(v=vs.85).aspx)   これと、以下のサイトの GpioSampleKMDF.asl のサンプルを使います。   https://github.com/Microsoft/Windows-driver-samples/blob/master/gpio/samples/simdevice/kmdf/GpioSampleKMDF.asl   実際のファイルは、以下のサイトの右側の緑色の [Clone or Download] ボタンを押すと表示される [Download ZIP] ボタンで Windows-driver-samples-master.zipをダウンロードすると、Windows-driver-samples\gpio\samples\SimDevice\kmdf フォルダにあります。   https://github.com/Microsoft/Windows-driver-samples   今回は、例として、ターゲット PC としてWindows 10 (1607) x86の仮想マシンの BIOS…


V4 プリンター ドライバのデバッガアタッチ方法

V4 プリンター ドライバをデバッグするときに、どのようにデバッガをアタッチすればよいか困ったことはありませんか?   明けましておめでとうございます!WDK サポートチームの石沢です。 今回は V4 プリンタドライバのレンダリングフィルタに Visual Studio をアタッチする方法をまとめたいと思います。 なお、ドライバパッケージの作成に関しては、まさかたさんの以下の記事を参考にしてください。今回はすでにドライバパッケージが出来上がっているものとして進めます。   プリンター用デバイスアプリのサンプルを動かしてみる https://blogs.msdn.microsoft.com/jpwdkblog/2013/05/21/12427/   プリンタドライバのデバッグ方法については、基本的には A 尾さんの以下の記事が元となっているのですが、実際にレンダリングフィルタのソースコード上でブレイクするところまでやってみたいと思います。   プリンタドライバやスプーラ コンポーネントをデバッグする https://blogs.msdn.microsoft.com/jpwdkblog/2009/06/26/1246-2/   具体的なデバッグまでの道のりは以下となります。   <デバッグまでの道のり> 1. V4 プリンター ドライバのインストール 2. PrintFilterPipelineSvc サービスのタイムアウト時間の設定 3. アプリケーションからの印刷 その 1 4. PrintFilterPipelineSvc サービスにデバッガをアタッチ 5. アプリケーションからの印刷 その 2   なお、今回動作を確認した環境は以下です。   ・OS: Windows 10 x86 Enterprise ・デバッガ:…


デバイスマネージャーの [表示] を [デバイス (接続別)] に切り替える

切り分けのために、接続したデバイスと PC のバスとの間でどんなドライバーが動いているか知りたいと思ったことはありますか?   皆さん、こんにちは。Windows Driver Kit サポートチームの津田です。今回は、そんな皆様に、デバイス マネージャーの [表示] を、デフォルトの [デバイス (種類別)] から [デバイス (接続別)] に切り替え、各デバイス ノードからドライバーを確認できるところをお見せしたいと思います。また、同じドライバー構成をカーネルデバッガーでデバイス ノードをたどって確認する方法もご紹介します。   今回、例として Windows 10 (1607) x86 を使います。   1. [スタート] メニューを右クリックして、[デバイス マネージャー] をクリックして、デバイス マネージャーを起動します。 2. 任意のデバイスをクリックします。今回は例として、[ディスクドライブ] にある [Virtual HD ATA Device] をクリックします。     3. 上図のように、[表示] をクリックすると、[デバイス (種類別)] となっているので、[デバイス (接続別)] をクリックします。     4. 上図の通り、対象デバイスが接続されている場所がツリー状に表示されます。上記の例では、以下のツリーになっています。  …


UMDF Version 2 の Toaster Sample をインストールする

今回は、ユーザーモードドライバーフレームワーク(User-mode Driver Framework, UMDF) のバージョン 2 について学びたい方向けのサンプル、Toaster Sample (UMDF Version 2) をご紹介します。   皆さん、こんにちは。WDK サポートチームの津田です。今回は、このサンプルをビルドして、ターゲット側 PC の Windows 10 (1607) x86 にインストールし、デバイスマネージャ上で表示されるところまでを確認します。サンプルをビルドする、開発側の PC は Windows 10 (1607) x64 に Visual Studio 2015 と WDK 10 がインストールされています。   1. サンプルの入手   Toaster Sample (UMDF Version 2) サンプルは、以下のサイトの右側の緑色の [Clone or Download] ボタンを押すと表示される [Download ZIP] ボタンで Windows-driver-samples-master.zipをダウンロードすると、Windows-driver-samples-master\general\toaster\umdf2 のフォルダにあります。…


Windows 10 Anniversary Update で適用されたドライバー署名の新しいポリシーについて

こんにちは。JS です。   以前、ブログ エントリ「Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について」で、Windows 10 で新しくなったドライバーの署名ポリシーについて触れたかと思います。当時はポリシーの事前のご案内であったため、今年 7 月 29 日 にリリースされた Windows 10 Anniversary Update で、そのポリシーが実際に適用されるようになりました。 この適用により、本格的にマイクロソフトの署名が必要となったため、ドライバーの開発者の皆様はこの先どのような対応が可能か、検討しているかと思います。実際、我々サポートチームも、ポリシーがどのように適用され、どのような対応が可能かについて、お問い合わせをいただいております。そのため、皆様のご参考になりますよう、今回のエントリでは、Windows 10 のドライバー署名ポリシーを一度おさらいし、注意点やよくある質問についても触れたいと思います。   Q: Windows 10 Anniversary Update のドライバー ポリシーはどういったものなのか? A: Windows 10 Anniversary Update では、基本的に、カーネル モードで動作するドライバーは、マイクロソフトより発行された証明書を用いた署名が付与されている必要がございます。もしマイクロソフトによる署名が付与されていない場合、ドライバーのロード時にポリシーが適用され、ドライバーが動作しません。ただ、Windows 10 Anniversary Update でも、特定の条件を満たしている場合に限り、第三者認証機関より発行された証明書を利用した Authenticode 署名 (自己署名) も有効なドライバー署名として扱われます。   Q: 自分で Authenticode 署名したドライバーは、Windows 10 Anniversary Update…


ダンプファイルに保存されたイベントログを取り出す

エンドユーザー様環境で BSOD が発生したため、取り急ぎ ダンプファイルはいただいたものの、その後の調査でイベントログを確認したくなったことはありますか?   皆さん、こんにちは。Windows Driver Kit サポートチームの津田です。今回は、そんな皆様に、ダンプファイルからイベントログを取り出す方法をご案内します。   ただし、あくまでもダンプファイルに残っている範囲の情報になります。そのため、ダンプファイルから得られたイベントログからは有用なログは得られないけれども、実際のイベントログには有用な情報が得られるかもしれないという場合には、改めてエンドユーザー様に事情を説明して、イベントログの採取をお願いすることになります。(もしくは、このようなことにならないよう、ダンプファイルだけでなく予めイベントログのご採取もお願いしておくことも考えられます。)逆に、今回ご案内する方法によって、ダンプファイルから有用なイベントログが得られれば、ご自身やエンドユーザー様等実際の情報採取に関わる方々に、追加のご負担をお願いせずに済む、また、追加の情報採取をお願いする側も待たずに済む、というメリットがあります。   具体的な手順は以下です。   1.ダンプファイルを WinDbg でオープン 2. !wmitrace.strdump で確認したいログの Logger Id を確認 3. !wmitrace.logsave <Logger Id> <ファイル名>.evtx でイベントログを保存 4. イベントビューアーで .evtx ファイルを開いてログを確認   1.ダンプファイルを WinDbg でオープン   今回は例として、前回の記事「ダンプファイルに保存された ETW トレースログを表示する」<https://blogs.msdn.microsoft.com/jpwdkblog/2016/08/29/%e3%83%80%e3%83%b3%e3%83%97%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ab%e4%bf%9d%e5%ad%98%e3%81%95%e3%82%8c%e3%81%9f-etw-%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b9%e3%83%ad%e3%82%b0%e3%82%92%e8%a1%a8/> で使用したダンプファイルをそのまま使います。ダンプファイルの開き方についても、この記事の「8. ダンプファイルを WinDbg でオープン」をご参照ください。   2. !wmitrace.strdump で確認したいログの Logger Id を確認   WinDbg 上の…


ダンプファイルに保存された ETW トレースログを表示する

ご自身が開発されているドライバについて、BSOD 発生時点のダンプファイルの情報からでは根本原因がわからず、BSOD 直前から発生までのドライバ内部の状態を知りたいと思ったことはありますか?   皆さん、こんにちは。Windows Driver Kit サポートチームの津田です。今回は、そんな皆様に、ETW トレースログを BSOD 発生時点のダンプファイルから参照する方法をご案内します。ETW についてご存じない方は、まずは、以前の「Event Tracing for Windows (ETW)」<https://blogs.msdn.microsoft.com/jpwdkblog/2011/12/27/event-tracing-for-windows-etw/> のエントリをご参照ください。   BSOD が発生するまでのトレースログがダンプファイルで参照できますと、以下の 4 点の事前準備は必要ですが、BSOD 発生時のメモリやレジスタの情報から逆アセンブリを追いかけるだけでは遡れなかった情報が取得できます。     (a) BSOD 発生時のダンプファイルで、根本原因特定のために知りたい変数や構造体を特定する。   (b) それがわかるよう、ETW トレースログをご自身のドライバのソースコードに埋め込む。   (c) そのドライバを、現象が再現する環境にインストールする。   (d) logman.exe でトレースログ採取を開始した後、現象を再現する。   これにより、根本原因が判明する可能性が高まります。しかも、ライブデバッグのように WinDbg をカーネルデバッグ接続してタイミングが変わったり、ソースコードのどこが原因なのか必ずしも特定できていない状況でステップ実行をするというような時間がかかったりするというデメリットを回避できます。   本ブログ エントリでは、以下の前提で進めます。     – (a),(b) は省略します。   – (c) として上述のブログ…


アクティブメモリダンプ

皆様、アクティブメモリダンプはご存知でしょうか。Windows 10 から追加された新しいダンプファイルの形式です。   いかがお過ごしでしょうか。WDK サポートチームの石沢です。 アクティブメモリダンプは、その特徴として、完全メモリダンプよりファイルサイズを抑えられることが挙げられます。 また、カーネルメモリダンプには存在しない、一部のユーザー空間のメモリ情報が付加されることも挙げられるでしょう。 上記のような特徴から、完全メモリダンプを出力するほどストレージの空き容量に余裕がない、出力に時間がかかってしまう、またカーネルメモリダンプでは情報が足りないという場合の選択肢として考えられます。 もちろんデバッグ時に、潤沢なリソースや環境がある場合は、完全メモリダンプを取得いただくことをお勧めいたします。   取得方法はいたって簡単! 先日の津田さんが執筆された記事「完全メモリダンプ採取の設定方法」の手順 (4) では [完全メモリダンプ] を選択しているのですが、こちらを [アクティブ メモリ ダンプ] に変更するだけです。     あとはダンプファイルを生成して、コールスタックを確認すれば…ユーザー空間の情報が残っていることが確認できますね! 以下の例では、ntdll や USER32 などのユーザー空間上の処理がコールスタックから確認することができています。   kd> k ChildEBP RetAddr  (…略…) 0008f5d4 76f75b83 NotMyfault+0x21f9 0008f600 76f56d5a USER32!_InternalCallWinProc+0x2b 0008f688 76f565dd USER32!UserCallDlgProcCheckWow+0x102 0008f6dc 76f72b32 USER32!DefDlgProcWorker+0xad 0008f6f8 76f75b83 USER32!DefDlgProcA+0x22 0008f724 76f59d1a USER32!_InternalCallWinProc+0x2b 0008f7bc 76f59af5 USER32!UserCallWinProcCheckWow+0x1aa 0008f818…


完全メモリダンプ採取の設定方法

Windows でブルースクリーンが発生した際に、完全メモリダンプを採取できるようにするための手順をご案内します。   Windows 7までの OS の場合は、「メモリダンプに !analyze -v するまで・前編 ~ ダンプの取り方~」<https://blogs.msdn.microsoft.com/jpwdkblog/2009/06/03/analyze-v-2/> のエントリの「1. カーネル デバッグと完全メモリ ダンプ ファイル」をご参照ください。   Windows 8以降は、以下の手順となります。   (1)  Windows 8 では [スタート画面] の画面左下端、Windows 8.1 では [スタート] (画面左下端 Windows アイコン) を右クリックし、[システム] をクリックします。 (※ ただし、Windows 8 でサポートをご提供するためには、2016 年 1 月 12 日以降 Windows 8.1 にしていただく必要があります。)   (2) [システムの詳細設定] をクリックします。   (3) [システムのプロパティ] の…