共用方式為


強制 IRQL 檢查

雖然核心模式驅動程式禁止在高 IRQL 或按住微調鎖定時存取可分頁記憶體,但如果頁面實際上尚未從工作集修剪並分頁至磁片,則可能不會注意到這類動作。

啟用強制 IRQL 檢查時,驅動程式驗證器會針對系統記憶體的使用提供極端壓力。 每當經過驗證的驅動程式要求微調鎖定、呼叫 KeSynchronizeExecution或引發 IRQL 以DISPATCH_LEVEL或更新版本時,所有系統可分頁集區、程式碼和資料 (,包括驅動程式的可分頁程式碼和資料) 都會從工作集修剪。 如果驅動程式嘗試存取任何此記憶體,驅動程式驗證程式會發出錯誤檢查。

從 Windows Vista 開始,此選項也會讓驅動程式驗證器偵測特定同步處理物件是否包含在可分頁記憶體中。 這些同步處理物件無法分頁,因為作業系統核心正在提升許可權的 IRQL 存取它們。 驅動程式驗證器可以偵測可分頁 的 KTIMER、PRKMUTEX、PKSPIN_LOCK、PRKEVENT、PKSPIN_LOCK、PRKSEMAPHORE、PERESOURCE 和 FAST_MUTEX 結構。

此記憶體使用量壓力不會直接影響未選取進行驗證的驅動程式。 未選取用於驗證的驅動程式引發 IRQL 時,不會觸發修剪動作。 不過,當正在驗證的驅動程式引發 IRQL 時,驅動程式驗證器會修剪未驗證的驅動程式可以使用的頁面。 因此,當此選項作用中時,可能偶爾會攔截未驗證的驅動程式認可的錯誤。

監視 IRQL 引發和微調鎖定

可以監視由正在驗證驅動程式所進行的 KeSynchronizeExecution 引發、微調鎖定和呼叫 IRQL 數目。 您也可以監視驅動程式驗證器已從工作集修剪可分頁記憶體的次數。 這些統計資料可由驅動程式驗證器管理員、Verifier.exe命令列或記錄檔顯示。 如需詳細資訊 ,請參閱監視全域計數器

核心偵錯工具擴充 功能 !verifier 也可以用來監視這些統計資料。 它會顯示與驅動程式驗證器管理員類似的資訊。 在 Windows XP 和更新版本中, !verifier 0x8 延伸模組會顯示已驗證驅動程式所做的最近 IRQL 變更記錄。 如需偵錯工具延伸模組的詳細資訊,請參閱 Windows 偵錯

在 DISPATCH_LEVEL 或更新版本呼叫 KeEnterCriticalRegion 或 KeLeaveCriticalRegion

KeEnterCriticalRegionKeLeaveCriticalRegion 是 API,可用來同步處理驅動程式程式碼的重要序列執行,以及傳遞一般核心非同步程序呼叫, (API) 。 無法在 IRQL = DISPATCH_LEVEL或更新版本呼叫 KeEnterCriticalRegionKeLeaveCriticalRegion API。 在 DISPATCH_LEVEL 或更新版本呼叫 KeEnterCriticalRegionKeLeaveCriticalRegion 可能會導致系統停止回應或記憶體損毀。

從 Windows 7 開始,如果啟用強制 IRQL 檢查選項,驅動程式驗證程式會在 DISPATCH_LEVEL 或更新版本偵測對這些 API 的呼叫。

啟用此選項

您可以使用驅動程式驗證器管理員或Verifier.exe命令列,為一或多個驅動程式啟用強制 IRQL 檢查功能。 如需詳細資訊,請參閱 選取驅動程式驗證器選項

  • 在命令列

    在命令列上,[強制 IRQL 檢查] 選項是由 位 1 (0x2) 來表示。 若要啟用強制 IRQL 檢查,請使用旗標值0x2或將0x2新增至旗標值。 例如:

    verifier /flags 0x2 /driver MyDriver.sys
    

    下一次開機之後,此功能將會處於作用中狀態。

    您也可以將 /volatile 參數新增至 命令,以啟用和停用強制 IRQL 檢查,而不重新開機電腦。 例如:

    verifier /volatile /flags 0x2 /adddriver MyDriver.sys
    

    此設定會立即生效,但當您關閉或重新開機電腦時遺失。 如需詳細資訊,請參閱 使用變動性設定

    強制 IRQL 檢查功能也會包含在標準設定中。 例如:

    verifier /standard /driver MyDriver.sys
    
  • 使用驅動程式驗證器管理員

    1. 啟動驅動程式驗證器管理員。 在 [命令提示字元] 視窗中輸入 驗證程式
    2. 選取 [為程式碼開發人員建立自訂設定] () ,然後按 [ 下一步]。
    3. 從完整清單中選取 [選取個別設定]。
    4. 選取 [ (檢查]) [強制 IRQL 檢查]。

    強制 IRQL 檢查功能也會包含在標準設定中。 若要使用此功能,請在 [驅動程式驗證器管理員] 中,按一下 [ 建立標準設定]。