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
https://troushoo.blog.fc2.com/tb.php/114-6ece8108
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (114)
ネットワーク (54)
Wireshark (48)
AD (36)
Linux (45)
WinDbg (46)
SOS・Psscor2/Psscor4 (25)
Visual Studio (56)
Tips (32)
コンテナ (4)
Azure (17)
.NET (24)
Python (9)
Java (5)
SQL (6)
事例 (1)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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