Time Travel Debugging (Preview) の Lab

ユーザーモードのプログラムで、クラッシュダンプでは原因がわからない問題を、問題が発生するまでの経緯をさかのぼって調べたいと思ったことはありませんか?それを実現してくれるのがTime Travel Debugging (TTD) です。TTD は、まだプレビューですが、WDK 1803 で TTD の使い方についてのLab が以下のドキュメントとして公開されました。   Time Travel Debugging – Sample App Walkthrough < https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/time-travel-debugging-walkthrough >   そこで、今回は、このLab の手順をご案内します。これにより、読者の方のデバッグの作業効率が上がれば幸いです。   ※ ただし、あくまでもプレビューですので、今後上記ドキュメントの内容は更新される可能性がある点にご注意ください。 ※ メモリダンプがスナップショットであるのに対し、TTD で取得できるトレースログはその連続となるため、必要なメモリやディスクの容量が多くなります。そのため、再現手順が確立していない問題や再現までに時間がかかる問題に対してなど、長期間にわたる実行には向かない点にもご注意ください。   手順の概要   失敗するプログラムのTime Travel Trace をキャプチャします。 dx (Display Debugger Object Model Expression) コマンドを使って、Time Travel Trace に記録された例外イベントを見つけます。 !tt (time travel) コマンドを使って、そのトレースの中の例外イベントの位置まで移動(travel) します。 トレースのその位置から、失敗したコードまでステップ実行でさかのぼります。 失敗したコードで、ローカル変数を確認し、誤った値を含む変数の仮説を立てます。…


Hyper-V 仮想マシンへのネットワーク経由のカーネルデバッガ接続方法

Hyper-V 仮想マシンに仮想 COM ポート経由のカーネルデバッガ接続方法では、レスポンスが遅く感じられたことはありませんか?今回は、Hyper-V 仮想マシンへのネットワーク経由のカーネルデバッガ接続方法をご案内します。これにより、読者の方のデバッグの作業効率が上がれば幸いです。   今回は、例として、WinDbg を動作させるホストPC では Windows 10 1803 x64、カーネルデバッガを接続される仮想マシンではWindows 10 1803 x86 が動作しています。ホストPC 側には、WDK 10 1803 がインストールされているものとします。仮想マシンは、第一世代のものを使用しています。   ホストPC と仮想マシンをネットワーク接続します。   仮想スイッチは、以下の図のように、以下の3点を満たす必要があります。 ・外部ネットワーク ・「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」にチェック ・VLAN ID を無効     この仮想スイッチ(図の例では、External という名前にしています) を、仮想マシンのネットワークアダプタ―に設定しています。     ホストPC のIP アドレスを確認します。   ホストPC 側でコマンドプロンプトを起動し、ipconfig を実行してIP アドレスを確認します。   >ipconfig   Windows IP 構成     イーサネット アダプター vEthernet (External):…


WDK for Windows 10, version 1803

WDK for Windows 10, version 1803 がリリースされました。 以下のドキュメントの手順に沿って、Windows 10 x64 version 1803 にインストールしてみます。   Download the Windows Driver Kit (WDK) < https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk >   Visual Studio 2017 をインストール   以下の3 つのエディションのいずれかをインストールします。 ·         Download Visual Studio Community 2017 ·         Download Visual Studio Professional 2017 ·         Download Visual Studio Enterprise 2017   インストールする際、[ワークロード] タブで[C++ によるデスクトップ開発] にチェックを入れます。これにより、WDK 1803…


Err.exe でエラーコードの定義を探す

NTSTATUS や、GetLastError() で得た Win32 エラーコードの定義がすぐにわからなくて困ったことはありますか?   今回は、そのような方のために、エラーコードの定義を探すのに便利なErr.exe をご紹介します。   入手手順   Err.exe は、以下のサイトからダウンロードしていただけます。   Microsoft Exchange Server Error Code Look-up < https://www.microsoft.com/en-us/download/details.aspx?id=985 >   ダウンロードしたErr.EXE は自己解凍プログラムのため、実行すると、解凍先フォルダを求められます。 解凍先を指定して解凍すると、以下のファイルが確認できます。このErr.exe が目的のツールです。   2004/04/01  18:18         1,698,816 Err.exe 2004/04/01  18:26           505,344 Error Code Lookup Tool.doc 2004/04/01  17:43            13,372 eula.txt     使い方   使い方は、コマンドプロンプトを起動し、「err.exe< エラーコード>」を実行するだけです。   今回は、例として、0xe000023c というエラーコードで実行してみます。   >…


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

今回は、ファイルシステムミニフィルタ ドライバのサンプル Minispy File System Minifilter Driver をご紹介します。   このサンプルは、システム上の任意の I/O を監視しログに記録する方法を示すサンプルです。   Minispy は、ユーザーモード アプリケーションの minispy.exe とカーネルモード ドライバの minispy.sys で構成されています。Minispy.sys が、様々なI/O に対応するコールバックを、フィルタマネージャに登録します。このコールバックが、システム上の任意のI/O を記録します。ユーザーが、この記録された情報を要求した時に、minispy.sys がminispy.exe にその情報を渡し、minispy.exe が画面上に出力、またはファイルにログしていきます。   あるデバイス上のI/O を監視するためには、minispy.exe を使って、明示的に minispy.sys をそのデバイスにアタッチする必要があります。あるデバイス上の I/O の監視をやめる場合もminispy.exe を使います。   今回は、このサンプルをWindows 10 (1709) x86 にインストールして、C ドライブ上で監視した I/O の情報がコマンドプロンプトやファイル上に出力されるところをお見せしたいと思います。サンプルをビルドする、開発側のPC はWindows 10 (1709) x64 にVisual Studio 2017 とWDK for Windows…


Process Monitor で OS 起動時のログを採取する手順

今回は、Process Monitor で OS 起動時のログを採取する手順である、Enable Boot Logging オプションを実行する手順をご案内します。   Process Monitor については、以前「Process Monitor」の記事でもご案内しておりますので、ご参考ください。こちらの記事の手順では、OS 起動後にログオンしてからシャットダウンを開始する前までの任意のタイミングをカバーしています。(その間に、Process Monitor を実行し、現象を再現させ、ログを取得することを前提にしています。) 対しまして、今回の手順は、Process Monitor のEnable Boot Logging を設定した後、OS を再起動しますが、その起動中から、明示的にログ採取を完了させるまでログを取得し続けます。そのため、OS 起動中だけでなく、シャットダウン時のログも取得できます。   [手順] 以下のサイトからProcess Monitor をダウンロードします。   Process Monitor v3.50 https://docs.microsoft.com/en-us/sysinternals/downloads/procmon   Download Process Monitor (981 KB)   ダウンロードしたProcessMonitor.zip を問題が発生している環境の任意のフォルダーに置き、unzipします。 Procmon.exe を実行します。 管理者権限が必要であるため、権限が不足している場合は、昇格ダイアログが表示されます。 管理者権限となるよう昇格ダイアログを操作します。(ユーザ名とパスワードの入力や昇格の[はい]・[いいえ]の選択など) Process Monitor の起動後、自動的にファイルシステム、レジストリ、プロセスおよびスレッドの活動の記録を開始し始めます。(起動オプションに/NoConnect を指定すると自動ログ機能は動作しません。) 虫眼鏡のアイコン([Capture] ボタン) をクリックし、記録を停止します。下記の画面の上部の赤い四角で囲った部分が [Capture]…


新しい Windows Driver Kit documentation

新しい Windows Driver Kit documentation が公開されました! 皆様、久方ぶりです。WDK サポートチームの石沢です。 今回は Widows Driver 開発についてのドキュメントが一新されたことについてのお知らせです。 Windows Driver Kit documentation https://docs.microsoft.com/en-us/windows-hardware/drivers/ 各ドキュメントの右上に注目していただきたいのですが、フィードバックがコメントとして投稿できるようになったりと、 インターフェースからかなり変わりましたので、是非一度目を通してみてください。 WDK サポートチーム 石沢 望夢


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

今回は、ファイルシステム ミニフィルタ ドライバのサンプルSimRep File System Minifilter Driver をご紹介します。   このサンプルは、ファイルオープンを他のパスにリダイレクトするリパースポイントの動作をシミュレートする実装を確認できるサンプルです。これをWindows 10 (1709) x86 にインストールして、C:\x\y というフォルダへのアクセスが C:\a\b というフォルダへのアクセスにリダイレクトされるところをお見せしたいと思います。サンプルをビルドする、開発側のPC はWindows 10 (1709) x64 にVisual Studio 2017 とWDK for Windows 10 Version 1709 がインストールされています。   1. サンプルの入手   SimRep File System Minifilter Driver サンプルは、以下のサイトの右側の緑色の [Clone or Download] ボタンを押すと表示される [Download ZIP] ボタンでWindows-driver-samples-master.zip をダウンロードすると、Windows-driver-samples-master\filesys\miniFilter\simrep のフォルダにあります。   https://github.com/Microsoft/Windows-driver-samples   2. サンプルのビルド…


INF ファイルが Universal かどうか検証する方法

今回は、INF ファイルが Universal かどうか検証する方法として、InfVerif.exe を使う方法をご案内します。   Universal INF についてご存じない方や具体的な条件について確認したい方は、以下をご参照ください。   Using a Universal INF File https://docs.microsoft.com/en-us/windows-hardware/drivers/install/using-a-universal-inf-file   InfVerif.exe は、WDK 10 がインストールされている環境の c:\Program Files(x86)\Windows Kits\10\tools\<arch> (<arch> は x86 や x64) フォルダにあります。   以下のドキュメントの通り、/u オプションで Universal かどうかを検証できます。実行時には /v オプションも併せてつけることで、エラーや警告がある時の詳細が確認できます。   Running InfVerif from the command line https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/running-infverif-from-the-command-line   /u        Reports errors if INF is not Universal….


MSDN インシデントで技術サポートにドライバー開発のお問い合わせをする方法

MSDN サブスクリプションの特典として付属している、テクニカル サポートのインシデントを利用して、ドライバー開発に関連したお問い合わせをする方法について、ご案内いたします。   流れとしては、大きく 2 段階あります。   [1] お電話でインシデントをアクティベーションしてアクセス ID と契約 ID を取得 (※初回またはご契約更新後の初回のみ必要) [2] Web から「法人のお客様向け 技術サポート窓口」のページからお問い合わせ   すでに [1] の ID をお持ちの方は、[2] へお進みいただけます。ただ、MSDN サブスクリプションのご契約を更新いただいた場合、改めて [1] が必要になります。   [1] お電話でインシデントをアクティベーションしてアクセス ID と契約 ID を取得   以下のいずれかにお電話をいただき、MSDN サブスクリプションの特典インシデントの有効化(アクティベーション) を行っていただき、アクセス ID と契約 ID を取得します。   カスタマー サービス (0120-750052) サポート契約センター (0120-17-0196)   いずれも営業時間は 9:00-17:30 (土日祝日、弊社指定休業日を除く) です。…