次の方法で共有


スタック用不変のMDLチェック

[インバリアント MDL Checking for Stack]\(スタックのインバリアント MDL チェック\) オプションは、ドライバー がドライバー スタック全体で不変の MDL バッファーを処理する方法を監視します。 ドライバー検証ツールは、インバリアント MDL バッファーの不正な変更を検出できます。 このオプションを使用するには、少なくとも 1 つのドライバーで I/O 検証を有効にする必要があります。

手記 このオプションは、Windows 8 以降で使用できます。

[インバリアント MDL Checking for Stack]\(スタックのインバリアント MDL チェック\) オプションを使用すると、要求がドライバー スタックから離れる時点でのみ、ドライバーがインバリアント MDL バッファーの規則に従います。

不変 MDL を持つ IRP が IoCallDriver ルーチンで初めて見られる場合、一意の署名は不変の MDL バッファーの内容から計算され、内部データベースに格納されます。 IoCompleteRequest ルーチンでの IRP の完了中に、IRP が署名を記録した不変の MDL をまだ保持している場合、ドライバー検証ツールは、バッファーが変更されていないことを検証します。

書き込み要求の不変バッファーは、IRP の有効期間全体を通じて変更することはできません。 読み取り要求の場合、インバリアント バッファーはディスパッチ パスで変更できないため、バッファーシグネチャの比較は IoCallDriver の最後の呼び出しで行われます。

[インバリアント MDL Checking for Stack]\(スタックのインバリアント MDL チェック\) オプションは、スタック内の個々のドライバーを通過する際のバッファーの動作に関係なく、ドライバー スタック全体で MDL バッファーの不変性を検証します。 このオプションはグローバルであり、ドライバーごとに選択的に適用することはできません。 [インバリアント MDL Checking for Stack]\(スタックのインバリアント MDL チェック\) オプションは、バッファーの不変性に違反したドライバーを特定できなくても、違反のみをキャッチできます。 障害のあるドライバーを特定するには、IoCallDriver および IoCompleteRequest DDI を呼び出すたびにバッファーの内容の不変性の検証を行うインバリアント MDL のドライバー チェック オプションを使用します。

このオプションのアクティブ化

ドライバー検証ツール マネージャーまたは Verifier.exe コマンド ラインを使用して、1 つ以上のドライバーのインバリアント MDL のスタックチェック機能をアクティブ化できます。 インバリアント MDL のスタック チェック オプションをアクティブ化または非アクティブ化するには、コンピューターを再起動する必要があります。 詳細については、「 ドライバー検証ツールのオプションの選択」を参照してください。

[インバリアント MDL Checking for Stack]\(スタックのインバリアント MDL チェック\) オプションをアクティブにするには、 I/O 検証もアクティブにする必要があります。

  • コマンド ラインで

    コマンド ラインでは、インバリアント MDL Checking for Stack は 0x00002000 (ビット 13) で表されます。 インバリアント MDL Checking for Stack をアクティブにするには、0x00002010のフラグ値を使用するか、フラグ値に0x00002010を追加します。 この値は、I/O 検証 (0x10) と不変 MDL Checking for Stack (0x00002000) をアクティブにします。 例えば次が挙げられます。

    verifier /flags 0x00002010 /driver MyDriver.sys
    

    この機能は、次の起動時にアクティブになります。

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

    1. ドライバー検証ツール マネージャーを起動します。 コマンド プロンプト ウィンドウに 「Verifier 」と入力します。
    2. (コード開発者向けの) [カスタム設定の作成] を選択し、[次へ] をクリックします。
    3. 完全な一覧から [個々の設定を選択] を選択します
    4. I/O 検証とインバリアント MDL Checking for Stack を選択 (チェック) します。
    5. コンピューターを再起動します。