体系的な低リソースのシミュレーション

体系的な低リソースのシミュレーション オプションでは、カーネル モード ドライバーにリソース障害を挿入します。 このオプションは、ドライバー エラー処理パスを突破します。 こうしたパスのテストは、これまで非常に困難でした。 体系的な低リソースのシミュレーション オプションでは、予測可能な方法でリソース エラーを挿入することにより、発見された問題を再現可能になります。 エラー パスは簡単に再現できるため、これらの問題に対する修正の確認も容易になります。

エラーの根本原因を特定するために、デバッガー拡張機能が提供されており、どのエラーがどの順番で挿入されたのかを正確に把握できます。

注意: このオプションは、コンピューター上のすべてのドライバー (または大規模なコレクション) を検証する目的では使用できません。 このオプションは、個々のドライバーまたは添付フィルター ドライバーの対象テストを行う場合にのみ使用してください。 多数のドライバーでこのオプションを同時に使用すると、予期しない結果が生じる可能性があり、テスト対象のドライバーとは無関係のコンポーネントでクラッシュが発生する可能性があります。

注意 Windows 8.1 の場合、WDK 8 で利用可能であったスタック ベースのエラー挿入機能がドライバー検証ツールに統合されています。 Windows 8.1 を実行しているコンピューターでは、体系的な低リソースのシミュレーション オプションを使用します。

特定のドライバーで体系的な低リソースのシミュレーション オプションが有効にすると、そのドライバーからカーネルと Ndis.sys へのいくつかの呼び出しをインターセプトします。 体系的な低リソースのシミュレーションでは、呼び出し履歴 (具体的には、有効になっているドライバーから取得される呼び出し履歴の部分) を確認します。 そのスタックを初めて見た場合、その呼び出しのセマンティクスに従って呼び出しが失敗します。 それ以外では、以前にその呼び出しが確認された場合は、そのまま渡されます。 体系的な低リソースのシミュレーションには、ドライバーを複数回読み込んでアンロードできるという事実に対処するためのロジックが含まれています。 ドライバーが異なるメモリ位置に再読み込みされた場合でも、呼び出し履歴が同じであることを認識します。

このオプションを有効にする

ドライバー検証ツール マネージャーまたは Verifier.exe コマンド ラインを使用して、1 つ以上のドライバーの体系的な低リソースのシミュレーション機能を有効化できます。 詳細については、「ドライバー検証ツール オプションの選択」を参照してください。 体系的な低リソースのシミュレーション オプションを有効化化または無効化するには、コンピューターを再起動する必要があります。

  • コマンドラインで

    Windows 11

    コマンド ラインでは、体系的な低リソースのシミュレーションは、verifier /rc 19 36 または verifier /dif 19 で表され、どちらも必要な DIF モードが含まれています。

    この機能は、次のブート後、またはコマンド文字列に /now 追加されている場合はすぐに有効になります。

    Windows 10 以前

    コマンド ラインでは、体系的な低リソースのシミュレーションは verifier /flags 0x040000 (Bit 18) で表されます。 体系的な低リソースのシミュレーションを行うには、フラグ値 0x040000 を使用するか、フラグ値に 0x040000 を追加します。 次に例を示します。

    verifier /flags 0x040000 /driver MyDriver.sys
    

    この機能は次回の起動後に有効になります。

    全般

    体系的な低リソースのシミュレーションを有効にした場合、/faultssystematicOPTION コマンド ライン オプションを使用して、体系的な低リソースのシミュレーションをさらに制御できます。

    OPTION 説明

    enableboottime

    コンピューターの再起動をまたぐフォールト挿入を有効にします。

    disableboottime

    コンピューターの再起動をまたぐフォールト挿入を無効にします (これは既定の設定です)。

    recordboottime

    コンピューターの再起動をまたがる what if モードでのフォールト挿入を有効にします。

    resetboottime

    コンピューターの再起動をまたがるフォールト挿入を無効にして、スタック除外リストをクリアします。

    enableruntime

    動的にフォールト挿入を有効にします。

    disableruntime

    動的にフォールト挿入を無効にします。

    recordruntime

    動的に what if モードでのフォールト挿入を有効にします。

    resetruntime

    フォールト挿入を動的に無効にして、それまでのフォールトのあるスタック リストをクリアします。

    querystatistics

    現在のフォールト挿入の統計を表示します。

    incrementcounter

    フォールトが挿入されたことを示すために使用されるテスト成功カウンターを増分します。

    getstackid COUNTER

    指定された挿入されたスタック識別子を取得します。

    excludestack STACKID

    スタックをフォールト挿入から除外します。

  • ドライバー検証ツール マネージャーの使用

    1. ドライバー検証ツール マネージャーを起動します。 コマンド プロンプト ウィンドウに「Verifier」と入力します。
    2. [カスタム設定の作成 (コード開発者用)] を選択し、[次へ] をクリックします。
    3. 全一覧から [個々の設定を選択] を選択します。
    4. [体系的な低リソースのシミュレーション] を選択 (チェック) します。
    5. コンピューターを再起動します。

体系的な低リソースのシミュレーションによって発生するバグ チェックのデバッグ

体系的な低リソースのシミュレーションで見つかった問題のほとんどは、バグ チェックになります。 これらのコード バグの原因を特定するために、Windows 用デバッグ ツール にはデバッガー拡張機能 (kdexts.dll) と必要なシンボルが用意されています。

デバッガー拡張機能を実行するには

  • デバッガー コマンド プロンプトで、次のコマンドを入力します。

    !verifier 0x800
    

これにより、挿入された最新のエラーからの呼び出し履歴を示す情報がデバッガーにダンプします。