troushoo

Driver Verifier : ドライバーのトラブルシューティングに使えるツール

Defrag Tools
今回は、マイクロソフトのエンジニアが出演する人気のビデオ、Defrag Toolsで紹介されていた “Driver Verifier” を紹介します。
Driver Verifier は Windows にデフォルトで入っているツールで、ドライバーのトラブルシューティングに便利なツールです。

[Driver Verifier とは?]
Windows にデフォルトで入っているツールで、ドライバーのトラブルシューティングに便利なツールです。
Driver Verifier を使用すると、システムに悪影響を与えるドライバーを突き止め、その悪影響の原因を突き止めることが可能になりえます。
以下、具体例を用いながら使用方法を紹介します。

[Driver Verifier の基本的な使用方法]
以下、Driver Verifier の基本的な使用方法を紹介します。

1. スタートメニューに ”verifier” と入力し、”verifier.exe” を起動します。
verifier

2. “タスクの選択” を行います。
ここでは、手軽に設定を作成できる、”標準の設定を作成する” を選択しました。
タスクの選択

3. “検証するドライバーの選択”を行います。
今回は、”一覧からドライバーを選択する” を選択しました。
検証するドライバーの選択

4. “検証するドライバーの選択”を行います。
今回は、NotMyFault を使用するため、”現在読み込まれていないドライバーを一覧に追加する”より、”myfault.sys” を選択しました。
 [補足] NotMyFault は意図的にバグチェックを発生させることができる、Microsoft 社が提供しているフリーツールです。
検証するドライバーの選択
myfault.sysを選択
すると、”myfault.sys” が一覧に表示されるので、チェックをいれて、”完了”をクリックします。
myfault.sys を選択

5. 再起動を促されるので、再起動を行います。
再起動

以上で、設定は終了です。

[Driver Verifier により、何がどう変わる?]
以下、Driver Verifier により、何がどう変わるかをみてみます。
その後、どうして結果が変わったのかを見てみます。

まず、何がどう変わったのかを見てみます。
上記の設定を行い再起動を行った後に、NotMyFault を利用してバグチェックを発生させ、ダンプを見てみます。
今回は、”Buffer overflow” を発生させました。
Not My Fault でBuffer overflow を発生

ダンプを開いて “!analyze –v” を実行したところです。
エラーコードが、”DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION (d6)” となっており、エラー発生時のスタックも、myfault からの呼び出しでバグチェックが発生していることがわかります。
Driver Verifier を有効にしたときのダンプ

一方、Driver Verifier を有効にしていない状態で、 上記同様、NotMyFault の”Buffer overflow” を発生させた時のダンプを見てみると、エラーコードは、”SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e)” となっておりました。
エラー発生時のスタックも、myfault はいませんでした。
Driver Verifier 無効時のダンプ

[Driver Verifier を有効にすると、どうして”!analyze –v”の結果が変わる?]
では、どうしてダンプの “!analyze –v”の結果が変わったのでしょうか?
それは、Driver Verifier が行ったことがわかれば、理解できます。

今回行った Driver Verifier の設定を行うと、プール割り当て時に”特別なプール”が使用されるようになります。
この”特別なプール”とは、アクセス禁止属性を持つプールで、アクセスがあるとバグチェックが発生します。
そのため、myfault.sys がバッファーオーバーフローを起こすと、即座にバグチェック (=”DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION (d6)”) が発生し、オーバーフローを起こした犯人が、myfault.sys である、とわかります。
Driver Verifer 有効時

一方、通常のプール(= Driver Verifier を有効にしていない状態) では、バッファーオーバーフロー自体が発生しても、バグチェックは発生しません。
Driver Verifier 無効時

しかし、バッファオーバーフローが発生すると、ほかのドライバのメモリ領域を壊してしまいます。
今回は、nt のメモリ領域を壊してしまい、nt で例外が発生し、それをハンドルできなかったため”SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e)” のバグチェックが発生した、ということになります。
Driver Verifier 無効時

リンク
・Defrag Tools: #16 – WinDbg – Driver Verifier
  今回の元ネタです。
  http://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-16-WinDbg-Driver-Verifier
・Using Driver Verifier to identify issues with Windows drivers for advanced users
  Driver Verifier は、今回紹介した”特別なプール”以外にも、複数有効にできる機能があります。それらの説明があります。
  http://support.microsoft.com/kb/244617


  1. 2013/05/23(木) 22:22:39|
  2. WinDbg
  3. | トラックバック:0
  4. | コメント:0
<<Wireshark のプロファイル - 基本的な使い方から、共有の方法まで | ホーム | Visual Studioの役に立つショートカット - デバッグ/設定 編>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/114-6ece8108
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (22)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する