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

切り分けのために、接続したデバイスと 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) [システムのプロパティ] の…


ファイルシステムミニフィルタードライバーのサンプル

ファイルシステムミニフィルタードライバーには、どのようなサンプルがあるかご存知でしょうか。   皆さん、こんにちは。Windows Driver Kit サポートチームの津田です。今回は、ファイルシステムミニフィルタードライバーのサンプルにどのようなものがあるかの一覧とそれぞれがある場所についてご案内します。サンプルの場所自体は、以下のサイトの [Download ZIP] ボタンで Windows-driver-samples-master.zipをダウンロードしていただいたことを前提に、ポイントします。   <https://github.com/Microsoft/Windows-driver-samples>   AVScan   AVScan は、Anti-Virus (アンチウィルス) を目的として、ファイル内のデータをスキャンする動作を示すサンプルです。   \Windows-driver-samples-master\filesys\miniFilter\avscan フォルダにあります。     CancelSafe   ミニフィルターでのキャンセルセーフキューの使い方のサンプルです。   \Windows-driver-samples-master\filesys\miniFilter\cancelSafe フォルダにあります。     CDO   ミニフィルターでの Control Device Object (CDO) の使い方のサンプルです。ミニフィルターには、アプリケーションとの通信方法が用意されているので、必ずしもアプリケーションがミニフィルターの CDO を CreateFile でオープンして、そのハンドルを使ってミニフィルターと通信する、という必要はありません。ただ、そのような方法を必要とされる方のために、参考として公開されています。   \Windows-driver-samples-master\filesys\miniFilter\cdo フォルダにあります。   Change   ファイルの変更を検知するサンプルです。   \Windows-driver-samples-master\filesys\miniFilter\change フォルダにあります。  …


新しい WDK (Build 10586) と EWDK を使ってドライバーをビルドするまで

何もインストールせずにドライバーをビルドできる環境があれば嬉しい…そう思ったことはありませんか?   皆さまこんにちは。WDK サポートチームの JS です。   以前は、「Windows 10 でサンプル ドライバーをビルドするまで」で Windows 10 用に新しく公開されたキットを紹介しましたが、そのキットが、2015 年 11 月 の November Update に合わせて、新しく公開されました。また、新しいドライバービルド用の環境として、Enterprise WDK (EWDK) と呼ばれる新しいキットが公開されました。   EWDK では、コマンド ラインをベースにしたビルド環境と提供しております。また、ビルド環境もファイルでまとまっているため、詳細なインストール手順はなく、ファイルのダウンロードとシンプルなコマンドの実行だけで利用することが可能です。 Visual Studio と統合されている従来の WDK を利用するためには、事前に、マシンに Visual Studio 及び WDK を都度 インストールする必要がありましたが、コンパクトになったこの EWDK を利用することでそれらの工程を経ることなくビルドに進めることが可能となっております。   サンプル ドライバーのビルドまでのステップについて、前回のバージョンから少々 変更点がありますので、この記事では、最新のツールを利用した、Toaster サンプルのビルドまでに必要な手順を、改めてご紹介したいと思います。EWDK を使ったドライバーのビルド手順も記載しましたので、併せてご参照いただけたら幸いです。   1.    新しい Visual Studio と WDK を使った…


NameChanger File System Minifilter Driver サンプルを動かしてみる

あるボリューム内で、あるフォルダへのアクセスを別のフォルダにリダイレクトするサンプルをご紹介します。   皆さん、こんにちは。WDK サポートチームの津田です。今回は、このようなサンプルとして、NameChanger File System Minifilter Driver ファイル システム ミニ フィルタ ドライバのサンプルを使用します。これを Windows 10 にインストールして、C:\A\B というフォルダへのアクセスが C:\X\Y というフォルダへのアクセスにリダイレクトされるところをお見せしたいと思います。   1.   サンプルの入手   NameChanger File System Minifilter Driver サンプルは、以下のサイトの [Download ZIP] ボタンで Windows-driver-samples-master.zipをダウンロードすると、Windows-driver-samples-master\filesys\miniFilter\NameChanger のフォルダにあります。   https://github.com/Microsoft/Windows-driver-samples   2.   サンプルのビルド   このフォルダの NameChanger.sln を、Visual Studio 2015 で開きます。     [ソリューション ‘NameChanger’] を右クリックして [構成マネージャー] をクリックします。    …