ダンプファイルに保存された 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’] を右クリックして [構成マネージャー] をクリックします。    …


Windows 10 バージョン 1511 (OS build 10586) でシリアルポートやパラレルポート経由で印刷できない現象が修正されました

KB3140743 (OS Build 10586.122) が米国時間 2016 年 3 月 1 日 (日本時間 2016 年 3 月 2 日) に公開されました。その中の修正の一つについてご案内します。   Windows 10 update history http://windows.microsoft.com/en-us/windows-10/update-history-windows-10   March 1, 2016 – KB3140743 (OS Build 10586.122)   Improved support for devices including some wearables, displays, and printer scenarios.   この修正により、Windows 10 バージョン 1511 (OS build 10586) で発生していた「LPT…


シリアルケーブルでのカーネルモードデバッグ設定手順

ユーザーモードのアプリケーションやドライバを開発しているからと言って、カーネルモードのデバッグをする必要がないと思っていませんか?   皆さん、こんにちは。WDK サポートチームの津田です。ユーザーモードのアプリケーションやドライバを開発していても、例えば、以下のようなトラブルシューティングのシナリオに遭遇することがございます。これらのシナリオのように一見カーネルモードのデバッグが必要ないように思われる件でも、必要に応じてカーネルモードのデバッグの設定をお願いすることがございます。   ・   一般的な CreateFile/ReadFile/WriteFile/DeviceIoControl 等の Win32 API が期待通りの動作をせず、エラーを返す場合 → カーネルモードで I/O マネージャが I/O リクエストパケット (IRP) に変換し、カーネルモードドライバーのスタックに送るので、その処理過程をライブデバッグする必要がある場合があります。   ・   スプーラサービスのように、Remote Procedure Call (RPC) で他のプロセス B からプロセス Aの関数が呼ばれた結果、ご自身のアプリケーションがプロセス A から API で取得する値が期待通りにならない。RPC の呼び出し元のプロセス B が何かを特定したい場合 → ユーザーモードデバッガで、プロセス A においてRPC の呼び出しが行われた呼び出し先の関数にブレークポイントを貼ります。現象再現時、ここにブレークします。その状態で、カーネルデバッガからブレークインすることで、他の全てのプロセスの各スレッドのコールスタックから、該当関数を呼び出しているものを確認します。これにより呼び出し元のプロセス B を確認できます。   ・   何らかのプロセスが、COM ポートなど特定のデバイスをオープンしているために、ご自身のアプリケーションはオープンできない。そのプロセスを特定したい場合 → 当該デバイスのドライバの IRP_MJ_CREATE コールバック関数でブレークポイントを貼り、再現させてブレークインすれば、どのプロセスでそのオープンが行われているか確認できる可能性があります。(システムスレッド経由など、複数のプロセスをまたがっていたりすると、もう少し調査が必要です。)   そこで、今回は、これまでカーネルモードのデバッグをする機会がなかった皆様のために、シリアルケーブルでのカーネルモードデバッグ設定手順をご案内いたします。大まかな流れは以下のようになりますが、それぞれのステップを図入りで解説します。   1.     ホスト PC…


デバッガ (WinDbg) をインストールする

カーネルモードもユーザーモードも、ライブデバッグもダンプ解析もできる、無償のデバッガ WinDbg をインストールしたことがありますか?   皆さん、こんにちは。WDK サポートチームの津田です。今回は、WinDbg をインストールしたことがない皆様のために、WinDbg をインストールする手順をご案内いたします。   今回は、インターネット接続された、Windows 10 Version 1511 x86 環境で、管理者権限を持つユーザーを前提に進めます。また、WDK 10 を既にインストールされている方は、その中にも含まれていますが、今回は WinDbg 単体 (スタンドアロンバージョン) でインストールしたいと思います。   1.    以下のページから、「Debugging Tools for Windows (WinDbg) を SDK から入手する」のリンクをクリックしてください。   WDK、WinDbg、関連ツールのダウンロード https://msdn.microsoft.com/ja-jp/windows/hardware/hh852365.aspx   デバッグ ツールの入手   Debugging Tools for Windows (WinDbg) を SDK から入手する http://go.microsoft.com/fwlink/p/?LinkId=536682   2.    以下のように、sdksetup.exe がダウンロードされるので、[実行] をクリックしてください。     3.   …


Windows 10 更新履歴 (Windows 10 update history 日本語版) を公開

Windows 10 update history のサイトが英語だけしかないと思われていませんか?   皆さん、こんにちは。WDK サポートチームの津田です。今回は、そのような皆様のために、今月より公開が始まりました “Windows 10 update history” のページの日本語版が公開されたことをご案内します。URL は以下です。   Windows 10 の更新履歴 http://windows.microsoft.com/ja-jp/windows-10/update-history-windows-10   私の前回の記事では、上記サイトを活用した切り分け方法もご案内しております。   お役に立てましたら幸いです。