Share via


不変な MDL のスタック用検査

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

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

スタックの不変 MDL チェック オプションを使用すると、要求がドライバー スタックから離れる時点のみ、ドライバーが不変 MDL バッファーのルールに従います。

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

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

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

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

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

スタックの不変 MDL チェック オプションをアクティブにするには、I/O 検証もアクティブにする必要があります。

  • コマンド ラインで

    コマンド ラインでは、スタックの不変 MDL チェックは、 0x00002000 (Bit 13) で表されます。 スタックの不変 MDL チェックをアクティブ化するには、0x00002010 のフラグ値を使用するか、フラグ値に 0x00002010 を追加します。 この値は、I/O 検証 (0x10) とスタックの不変 MDL チェック (0x00002000) をアクティブ化します。 次に例を示します。

    verifier /flags 0x00002010 /driver MyDriver.sys
    

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

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

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