ドライバー検証ツール
ドライバーの検証ツールは、Windows カーネルモード ドライバーとグラフィックス ドライバーを監視して、無効な関数呼び出しやシステムを破損する可能性があるアクションを検出します。 ドライバーの検証ツールを使用すると、Windows ドライバーに対してさまざまな負荷やテストを実施し、不適切な動作を見つけることができます。 実行するテストを構成できます。これにより、ドライバーに非常に高い負荷をかけたり、より効率的なテストを行ったりすることができます。 また、ドライバーの検証ツールは、複数のドライバーで同時に実行することも、一度に 1 つのドライバーに対して実行することもできます。
注意事項
- ドライバーの検証ツールを実行すると、コンピューターがクラッシュする場合があります。
- ドライバーの検証ツールは、テストとデバッグに使用しているコンピューターでのみ実行してください。
- ドライバーの検証ツールを使用するユーザーは、コンピューターの Administrators グループに属している必要があります。
ドライバーの検証ツールは、どこでダウンロードできますか?
ドライバー検証ツールは、ほとんどのバージョンの Windows で、%WinDir%\system32\ に Verifier.exe として含まれているため、ダウンロードする必要はありません。 (ドライバーの検証ツールは Windows 10 S には含まれていないため、代わりに Windows 10 でドライバーの動作をテストすることをお勧めします)。ドライバーの検証ツールは、ダウンロード パッケージとして個別には配布されていません。
Windows 10 および以前のバージョンの Windows でのドライバーの検証ツールの変更については、「ドライバーの検証ツール: 新機能」を参照してください。
ドライバーの検証ツールをいつ使用するか
ドライバーの開発とテスト全体を通じて、ドライバーの検証ツールを実行します。 具体的には、次の目的でドライバーの検証ツールを使用します。
開発サイクルの早い段階で問題を見つけるため。修正が容易で、コストが低くなります。
テストの失敗とコンピューターのクラッシュをトラブルシューティングおよびデバッグするため。
WDK、Visual Studio、および Windows Hardware Lab Kit (Windows HLK) または Windows ハードウェア認定キット (Windows 8.1 用) のテストを使用して、テスト用のドライバーをデプロイするときの動作を監視するため。 ドライバーのテストの詳細については、「ドライバーのテスト」を参照してください。
重要
Windows ハードウェア互換性プログラムには、クライアントおよびサーバー オペレーティング システム上の静的ツール ロゴ (STL) テスト用の CodeQL が必要です。 引き続き、古い製品の SDV と CA のサポートをメインします。 パートナーは、静的ツール ロゴ テストの CodeQL 要件を確認することを強くお勧めします。 CodeQL の使用方法の詳細については、「CodeQL と静的ツールのロゴ テスト」を参照してください。
ドライバーの検証ツールを起動する方法
ドライバーの検証ツールは、テスト コンピューター、またはテストおよびデバッグしているコンピューターでのみ実行してください。 ドライバーの検証ツールを最大限に活用するには、カーネル デバッガーを使用してテスト コンピューターに接続する必要があります。 デバッグ ツールの詳細については、「Windows 向けのデバッグ ツール (WinDbg、KD、CDB、NTSD)」を参照してください。
[管理者として実行] を選択して [コマンド プロンプト] ウィンドウを起動し、「検証ツール」と入力して [Driver Verifier Manager] (ドライバー検証ツール マネージャー) を開きます。
[標準設定の作成] (既定のタスク) を選択し、[次へ] を選択します。
[カスタム設定の作成] を選択して、定義済みの設定から選択したり、個々のオプションを選択したりすることもできます。 詳細については、「ドライバーの検証ツールのオプションとルール クラス」および「ドライバーの検証ツールのオプションの選択」を参照してください。
[Select what drivers to verify] (検証するドライバーの選択) で、次の表で説明されているいずれかの選択スキームを選択します。
オプション 推奨される用途 署名されていないドライバーを自動的に選択する 署名されたドライバーを必要としないバージョンの Windows を実行しているコンピューターでテストする場合に便利です。
古いバージョンの Windows 用にビルドされたドライバーを自動的に選択する より新しいバージョンの Windows とのドライバーの互換性をテストする場合に便利です。
このコンピューターにインストールされているすべてのドライバーを自動的に選択する システムでテストされるドライバーの数を最大限にします。 このオプションは、ドライバーがシステムの他のデバイスまたはドライバーと対話できるテスト シナリオに役立ちます。
このオプションでは、特別なプールと一部のリソースの追跡に使用できるリソースを使い果たす場合もあります。 すべてのドライバーをテストすると、システムのパフォーマンスに悪影響を及ぼす可能性もあります。
一覧からドライバー名を選択する ほとんどの場合、どのドライバーをテストするかを指定できることが望まれます。
デバイス スタック内のすべてのドライバーを選択すると、[Enhanced I/O Verification] (拡張 I/O 検証) オプションにより、オブジェクトを追跡し、コンプライアンスを確認できます。これは、I/O 要求パケット (IRP) がスタック内の各ドライバー間で渡され、エラーが検出されたときに、より詳細なレベルの情報を提供できるためです。
システムまたはドライバーのパフォーマンス メトリックを測定するテスト シナリオを実行している場合、またはメモリの破損やリソース追跡の問題 (デッドロックやミューテックスなど) を検出するために使用できる最大数のリソースを割り当てる場合は、1 つのドライバーを選択します。 [特別なプール] と [I/O 検証] オプションは、1 つのドライバーだけに対して使用する場合に、より効果的です。
[Select driver names from a list] (一覧からドライバー名を選択する) を選択した場合は、[次へ] を選択してから、1 つ以上の特定のドライバーを選択します。
[完了] を選択し、コンピューターを再起動します。
Note
Windows バージョン 20150 から 25126 でドライバーの検証ツールを使用する場合、[ntoskrnl] を選択すると、無効な状態エラーが発生することがあります。
この問題を回避するには、[ntoskrnl] の選択を解除するか、Windows をビルド 25126 より新しいバージョンにアップグレードします。
コマンド プロンプトでドライバーの検証ツールを実行する
ドライバー検証ツール マネージャーを起動せずに、コマンド プロンプト ウィンドウでドライバーの検証ツールを実行することもできます。 たとえば、myDriver.sys というドライバーに対して標準設定でドライバーの検証ツールを実行するには、次のコマンドを使用します。
verifier /standard /driver myDriver.sys
コマンド ライン オプションの詳細については、「ドライバーの検証ツールのコマンド構文」を参照してください。
ドライバーの検証ツールを制御する方法
ドライバー検証ツール マネージャーまたはコマンド ラインを使用して、ドライバーの検証ツールを制御できます。 ドライバー検証ツール マネージャーを起動するには、このトピックの前の方の「ドライバーの検証ツールを起動する方法」を参照してください。
次の各アクションでは、ドライバー検証ツール マネージャーを使用するか、コマンド ラインを入力できます。
ドライバーの検証ツールを停止またはリセットするには
ドライバー検証ツール マネージャーで [Delete existing settings] (既存の設定の削除) を選択し、[完了] を選択します。
または
コマンド プロンプトに次のコマンドを入力します。
verifier /reset
コンピューターを再起動します。
ドライバーの検証ツールの統計情報を表示するには
ドライバー検証ツール マネージャーで [Display information about the currently verified drivers] (現在検証されているドライバーに関する情報を表示する) を選択し、[次へ] を選択します。 [次へ] を選択し続けると、追加情報が表示されます。
または
コマンド プロンプトに次のコマンドを入力します。
verifier /query
ドライバーの検証ツールの設定を表示するには
ドライバー検証ツール マネージャーで [Display existing settings] (既存の設定の表示) を選択し、[次へ] を選択します。
または
コマンド プロンプトに次のコマンドを入力します。
verifier /querysettings
ドライバーの検証ツールの違反をデバッグする方法
ドライバーの検証ツールを最大限に活用するには、カーネル デバッガーを使用してテスト コンピューターに接続する必要があります。 Windows 向けのデバッグ ツールの概要については、「Windows 向けのデバッグ ツール (WinDbg、KD、CDB、NTSD)」を参照してください。
ドライバーの検証ツールが違反を検出すると、コンピューターを停止するためのバグ チェックが生成されます。 これは、問題をデバッグするために、できるだけ多くの情報を提供するためです。 ドライバーの検証ツールを実行しているテスト コンピューターにカーネル デバッガーが接続されていて、ドライバーの検証ツールが違反を検出すると、Windows はデバッガーを中断し、エラーの簡単な説明を表示します。
ドライバーの検証ツールによって検出されたすべての違反により、バグ チェックが発生します。 これは、通常、バグ チェック 0xC4 です。 詳細については、「バグ チェック 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION のデバッグ」と「バグ チェック 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION」を参照してください。
その他の一般的なバグ チェック コードには、次のようなものがあります。
- バグ チェック 0xC1: SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
- バグ チェック 0xC6: DRIVER_CAUGHT_MODIFYING_FREED_POOL
- バグ チェック 0xC9: DRIVER_VERIFIER_IOMANAGER_VIOLATION
- バグ チェック 0xD6: DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
- バグ チェック 0xE6: DRIVER_VERIFIER_DMA_VIOLATION
詳細については、「ドライバーの検証ツールが有効になっている場合のバグ チェックの処理」を参照してください。
新しいデバッグ セッションを開始するときは、デバッガー拡張機能コマンド !analyze を使用します。 カーネル モードでは、!analyze コマンドは最新のバグ チェックに関する情報を表示します。 追加情報を表示するには、障害が発生しているドライバーを識別できるように、kd> プロンプトでコマンドにオプション -v を追加します。
kd> !analyze -v
!analyze に加えて、kd> プロンプトで次のデバッガー拡張機能を入力して、ドライバーの検証ツールに固有の情報を表示できます。
!verifier は、キャプチャされたドライバーの検証ツールの統計情報をダンプします。 使用可能なすべてのオプションを表示するには、!verifier -? を使用します。
kd> !verifier
!deadlock は、ドライバーの検証ツールのデッドロック検出機能によって追跡されるロックまたはオブジェクトに関連する情報を表示します。 使用可能なすべてのオプションを表示するには、!deadlock -? を使用します。
kd> !deadlock
!iovirp [address] では、I/O 検証ツールによって追跡される IRP に関連する情報が表示されます。 次に例を示します。
kd> !iovirp 947cef68
違反があった DDI コンプライアンス チェック規則を検索します。 (RuleID は常にバグ チェックの最初の引数です。) DDI コンプライアンス チェックのすべての規則 ID は、0x200nn 形式です。