堆疊的非變異 MDL 檢查
Invariant MDL Checking for Stack 選項會監視驅動程式如何處理驅動程式堆疊上的非變異 MDL 緩衝區。 驅動程式驗證器可以偵測不合法的非變異 MDL 緩衝區修改。 若要使用此選項,必須在至少一個驅動程式上啟用 I/O 驗證。
注意從 Windows 8 開始,可以使用此選項。
Invariant MDL Checking for Stack 選項可確保驅動程式只會在要求離開驅動程式堆疊時,遵循非變異 MDL 緩衝區的規則。
第一次在 IoCallDriver 常式中看到具有非變異 MDL 的 IRP 時,會從非變異 MDL 緩衝區的內容計算唯一簽章,並儲存在內部資料庫中。 在 IoCompleteRequest 常式中完成 IRP 期間,如果 IRP 仍然具有我們記錄簽章的非變異 MDL,驅動程式驗證程式會驗證緩衝區尚未變更。
寫入要求的不變異緩衝區無法在 IRP 的整個存留期內修改。 對於讀取要求,無法在其分派路徑上修改不變數緩衝區,因此緩衝區簽章的比較是在最後一次 呼叫 IoCallDriver時完成。
Invariant MDL Checking for Stack 選項會驗證整個驅動程式堆疊上的 MDL 緩衝區不因而異,而不論緩衝區在堆疊中傳遞個別驅動程式時會發生什麼事。 此選項是全域選項,無法依每個驅動程式選擇性地強制執行。 Invariant MDL Checking for Stack 選項只能攔截違規,而無法找出違反緩衝區變異的驅動程式。 若要協助找出錯誤的驅動程式,請使用 Invariant MDL Checking for Driver 選項,它會在 每次呼叫 IoCallDriver 和 IoCompleteRequest DIS 時驗證緩衝區內容的不變數。
啟用此選項
您可以使用驅動程式驗證程式管理員或Verifier.exe命令列,為一或多個驅動程式啟用堆疊的不變數 MDL 檢查功能。 您必須重新開機電腦,才能啟動或停用 [堆疊的非變異 MDL 檢查] 選項。 如需詳細資訊,請參閱 選取驅動程式驗證器選項。
若要啟用 [堆疊的非變異 MDL 檢查] 選項,您也必須啟用 I/O 驗證。
在命令列
在命令列中,Stack 的 Invariant MDL Checking 是由 ( 位 13) 0x00002000表示。 若要啟用 Stack 的非變異 MDL 檢查,請使用旗標值0x00002010或將0x00002010新增至旗標值。 此值會啟動堆疊 (0x00002000) 的 I/O 驗證 (0x10) 和非變異 MDL 檢查。 例如:
verifier /flags 0x00002010 /driver MyDriver.sys
下一次開機之後,此功能將會處於作用中狀態。
使用驅動程式驗證器管理員
- 啟動驅動程式驗證器管理員。 在命令提示字元視窗中輸入 驗證程式 。
- 選取 [為程式碼開發人員建立自訂設定 () ],然後按 [ 下一步]。
- 從完整清單中選取 [選取個別設定]。
- 選取 [ (檢查) I/O 驗證 和堆疊的非變異 MDL 檢查。
- 重新啟動電腦。