Share via


ドライバー検証ツール: 新機能

ドライバー検証ツールは、Windows 2000 以降のすべてのバージョンの Windows で使用できます。 各バージョンでは、Windows ドライバーのバグを見つけるための新機能とチェックが導入されています。 このセクションでは、変更の概要と関連ドキュメントへのリンクを示します。

Windows 11 のドライバー検証ツール (更新日: 2021 年 9 月 30 日)

Windows 11 以降では、揮発性構文とは異なるコマンド構文を使用して、再起動せずに多くのフラグを有効にすることができます。 新しい構文の詳細については、「ドライバー検証ツールのコマンド構文」を参照してください。

Windows 10 のドライバー検証ツール (更新日: 2018 年 5 月 8 日)

重要

Windows 10 バージョン 1803 以降のリリースで WDF 検証ツールを有効にする方法については、「KMDF 検証ツールの使用」を参照してください。

  • ドライバー検証ツールの /standard フラグの一部として WDF 検証を有効にすることはできます。 詳細については、「ドライバー検証ツールのコマンド構文」を参照してください。
  • WDF 検証は自動的に有効化されなくなったため、この変更は構文 /flags 0x209BB を使用して DV を有効にする場合に影響します。

Windows 10 より、次のテクノロジの新しいドライバー検証規則がドライバー検証ツールに含まれています。

Windows 8-1 のドライバー検証ツール (更新日: 2013 年 6 月 17 日)

Windows 8.1 より、エラーを検出するための 4 つの新しいオプションがドライバー検証ツールに導入されました。

Windows 8 のドライバー検証ツール (更新日: 2012 年 10 月 20 日)

Windows 8 より、エラーを検出するための 5 つの新しいオプションがドライバー検証ツールに導入されました。

  • Power Framework 遅延ファジー テスト は、ランダムな実行遅延を挿入するオプションで、電源管理フレームワーク (PoFx) を使用するドライバーのコンカレンシーのバグの検出に役立ちます。 実行の遅延には上限があります。 このオプションは、電源管理フレームワーク (PoFx) を直接利用しないドライバーには推奨されません。
  • DDI コンプライアンス チェック オプションは、静的ドライバー検証ツールが使用するのと同じデバイス ドライバー インターフェイス (DDI) の使用ルールを適用して、ドライバーが関数に必要な IRQL で関数呼び出しを行っていることを確認します。 DDI コンプライアンス チェックは、標準のドライバー検証ツール オプションの一部として実行されます。
  • スタックの不変 MDL チェック オプションは、ドライバーがドライバー スタック全体で不変 MDL バッファーを処理する方法を監視します。
  • ドライバーの不変 MDL チェック オプションは、ドライバーがドライバーごとに不変 MDL バッファーを処理する方法を監視します。
  • スタック ベースの障害挿入オプションは、カーネル モード ドライバーにリソース割り当て障害を挿入します。

Visual Studio 2012 と Windows 8 用 WDK を使用してドライバーをビルド、デプロイ、テストする場合は、テスト用にドライバーをデプロイするときに、テスト コンピューターで実行するようにドライバー検証ツールを構成することもできます。

Windows 7 のドライバー検証ツール (更新日: 2012 年 10 月 22 日)

Windows 7 のドライバー検証ツールに新しいテストと機能強化が加えられ、ドライバー検証ツールが一般的なドライバーのバグのより多くのクラスを公開できるようになりました。

  • カーネル ドライバーからのユーザー ハンドルの不適切な参照
  • I/O 検証の機能強化
  • 特別なプール、プールの追跡、および低リソース シミュレーションの機能強化
  • 同期メカニズムの不適切な使用
  • 不適切なオブジェクト参照
  • DPC ルーチンからのプール クォータの請求
  • システム シャットダウンのブロックまたは遅延
  • 保留中の I/O 要求を強制する操作の強化

Windows 7 では、ドライバー検証ツールは、キューに入っているスピン ロックのチェックを提供します。これらのチェックは、以前のバージョンの Windows でスピン ロックに提供されるものと似ています。 これらのチェックには、以下が含まれます。

  • KeAcquireInStackQueuedSpinLock など、割り込み要求レベル (IRQL) の値を引き上げることが想定される操作が、実際に IRQL 値を引き下げないことを確認します。

  • KeReleaseInStackQueuedSpinLock など、IRQL の値を引き下げることが想定される操作が、実際に IRQL 値を引き上げないことを確認します。

  • 強制 IRQL 検査オプションが有効になっている場合、IRQL を DISPATCH_LEVEL 以上に上げるときに、ドライバーが昇格された IRQL で実行されている間にページング可能なメモリへの参照を公開しようとしたときに、システム プロセスのワーキング セットをトリミングします。

  • デッドロック検出オプションが有効になっている場合に発生する可能性のあるデッドロックを予測します。

  • デッドロック検出オプションが有効になっている場合に、同じ KSPIN_LOCK データ構造をスピン ロックとスタック キュー スピン ロックの両方として使用することを試みます。

  • スピン ロック アドレスとして使用されるユーザー モードの仮想アドレスなど、明らかに正しくないポインター値をチェックします。

  • ドライバー検証ツール IRQL ログでの IRQL 遷移のログ記録。 この情報は、Windows デバッガーの !verifier 8 拡張機能を使用すると表示されます。 「!verifier」を参照してください。

デバッグに関する追加情報

Windows 7 では、ドライバー検証ツールは、デバッグに役立つ次の追加情報を提供します。

検証済みドライバーからの KeEnterCriticalRegionKeLeaveCriticalRegion への最近の呼び出しに関して、スタック トレースを時系列順に含むログがあります。 ログの内容は、Windows デバッガーの !verifier 0x200 デバッガー拡張機能を使用して表示されます。 この情報は、スレッドが重要な領域で予期せず実行されているシナリオや、スレッドが既に離れた重要な領域から離れようとしているシナリオを理解するのに役立ちます。

!verifier 0x40 デバッガー拡張機能を使用すると、保留中の I/O 要求を強制する操作のログから追加情報を表示できます。 以前のバージョンの Windows では、ドライバー検証ツールによって強制的に保留された IRP ごとにスタック トレースが 1 つだけログに含まれていました。 これは、強制的に保留された IRP に対して IoCompleteRequest が初めて呼び出されたときのスタック トレースでした。 Windows 7 では、強制的に保留された IRP ごとに、少なくとも 2 つのログ エントリ (場合によっては 2 つ以上) があります。

  • ドライバー検証ツールによって強制的に保留される IRP が選択されたときのスタック トレース。 ドライバー検証ツールは、検証済みドライバーの 1 つが IoCallDriver を呼び出すと、IRP の一部を、強制的な保留の対象として選択します。
  • 完了が検証済みドライバーに到達する前の、強制的に保留された IRP の各 IoCompleteRequest 呼び出しのスタック トレース。 同じ IRP に対して複数の IoCompleteRequest 呼び出しが存在する可能性があります。これは、ドライバーの 1 つが一時的に完了ルーチンから完了を停止し、再度 IoCompleteRequest を呼び出すことによって再開できるためです。

IRQL 遷移ログには、より多くの有効なスタック トレースがあります。 このログは、!verifier 8 を使用して表示されます。 Windows 7 より前のバージョンの Windows では、ドライバー検証ツールは、管理者特権の IRQL でこれらのスタック トレースの一部をログに記録しようとしても、IRQL 値が高いため、スタック トレースをキャプチャできませんでした。 Windows 7 では、ドライバー検証ツールは次のタイミングでスタック トレースをキャプチャしようとします。

  • IRQL を引き上げる前。たとえば、検証済みドライバーが KeAcquireSpinLock を呼び出すとき。
  • IRQL を引き下げた後。検証済みドライバーが KeReleaseSpinLock を呼び出すとき。

これにより、ドライバー検証ツールは、これらの IRQL 遷移スタック トレースの多くをキャプチャできます。

!analyze では、拡張 I/O 検証ツール チェック (Windows 7 の I/O 検証ツールの一部) によって公開される問題をトリアージできます。 以前のバージョンの Windows では、拡張 I/O 検証ツール エラー レポートには、ドライバー検証ツールによって検出されたドライバーの不具合の説明とデバッガーへの中断が表示されていました。 このような中断後に !analyze を実行しても、これらの中断の多くに対して意味のあるトリアージは行われません。なぜなら、!analyze では、デバッガーに表示されるエラー説明テキストの情報を使用できないためです。 Windows 7 では、これらのドライバーの不具合に関する意味のある情報は、ドライバー検証ツールによってメモリに保存されます。 !analyze は、この情報を見つけて、これらの中断の多くに対してはるかに意味のある自動トリアージを実行できます。

Windows Vista のドライバー検証ツール (更新日: 2009 年 2 月 9 日)

Windows Vista のドライバー検証ツールが新しいテストと機能で強化されました。

  • 再起動せずにドライバー検証ツールを有効にし、設定を変更する
  • 低リソース シミュレーションの強化
  • 保留中の I/O 要求を強制する
  • セキュリティの検査
  • より詳細な I/O 検証
  • 強化された IRQL チェック
  • その他の検査
  • ロックされたメモリ ページの追跡
  • その他の自動チェック

Windows XP のドライバー検証ツール (更新日: 2001 年 12 月 4 日)

ドライバー検証ツールは、Windows カーネル モード ドライバーとグラフィックス ドライバーを監視するためのツールです。 Microsoft では、ドライバーが無効な関数呼び出しを行っていないか、システムの破損を引き起こしていないかどうかを確認するために、ドライバー検証ツールを使用してドライバーをテストすることをハードウェア製造元に強くお勧めします。 Microsoft Windows XP のドライバー検証ツールが新しいテストと機能で強化されました。

テストのために WHQL に送信されたドライバーは、ドライバー検証ツールに合格する必要があります。 Windows XP のドライバー検証ツールの新機能は次のとおりです。

  • ドライバー検証ツール マネージャー。verifier.exe 用の新しいグラフィカル ユーザー インターフェイス (GUI)
  • スタック切り替え監視用の新しい自動チェック
  • DMA 検証 (HAL 検証とも呼ばれます)、デッドロック検出、SCSI 検証用の新しいドライバー検証ツール オプション
  • "レベル 1" テストと "レベル 2" テスト、オプションの拡張 I/O 検証テストを組み合わせた I/O 検証の変更
  • 新しいデバッガー拡張機能 !deadlock!dma
  • 新しいバグ チェック: 0xE6 (DRIVER_VERIFIER_DMA_VIOLATION) と 0xF1 (SCSI_VERIFIER_DETECTED_VIOLATION)
  • 既存のバグ チェック コードの追加のサブコード 0xC4 と 0xC9

ドライバー検証ツールの機能には、次のものも含まれます。

  • 新しい検証ツールのコマンド ライン オプション verifier.exe ユーティリティの新しいパラメーター VolatileDriverList/adddriver キーワードと共に使用して、揮発性設定に追加するドライバーの一覧を指定できます。 VolatileDriverList/removedriver キーワードと共に使用すると、削除するドライバーの一覧を指定できます。

  • 新しい !verifier 機能拡張 新しい !verifier 機能拡張を使用すると、低リソースまたは IRQL の引き上げおよびスピン ロックを監視するときに追加のログ情報を表示できます。 オンライン ヘルプも利用できます。

    • フラグ に 0x4 を設定した場合、低リソース シミュレーション中にドライバー検証ツールによって挿入されたエラーのログが表示に含まれます
    • フラグ に 0x8 を設定した場合、検証中のドライバーによって行われた最新の IRQL の変更のログが表示に含まれます
    • フラグが 0x4 または 0x8 に正確に等しい場合、Quantity パラメーターは、表示に含めるレコードまたはログ エントリの数を指定します
    • ? パラメーターは、簡単なヘルプ テキストを表示します
  • ドライバー検証ツール マネージャーのオンライン ヘルプ: ドライバー検証ツール マネージャーのオンライン ヘルプは、次のいずれかの方法で表示できます。

    • ドライバー検証ツール マネージャー ウィンドウで項目を長押し (または右クリック) し、ポップアップ メニューから [What's This?] (ポップ ヒント) を選択します。
    • ウィンドウの右上隅にある疑問符 (?) を選択し、ドライバー検証ツール マネージャー ウィンドウで項目を選択します。