共用方式為


(wdm) IrqlNtifsApcPassive 規則

IrqlNtifsApcPassive 規則指定只有當驅動程式在 IRQL = PASSIVE_LEVEL或 IRQL <= APC_LEVEL執行時,驅動程式才會呼叫規則中列出的 DIS。

驅動程式模型:WDM

此規則找到的錯誤檢查 () 錯誤檢查0xC4:DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)

範例

下列程式代碼違反此規則:

//
// KeAcquireSpinLock raises the IRQL to DISPATCH_LEVEL.
//

KeAcquireSpinLock (&Lock, &OldIrql);

//
// ERROR: ZwWriteFile can only be called at IRQL == PASSIVE_LEVEL.
//

ZwWriteFile (Handle,
             NULL,
             NULL,
             NULL,
             IoStatusBlock,
             Buffer,
             BufferLength,
             NULL,
             NULL);

KeReleaseSpinLock (&Lock, OldIrql);

如需 IRQL 層級的詳細資訊,請參閱 分派例程和 IRQLs 和管理 硬體優先順序

測試方法

在編譯時期

執行 靜態驅動程式驗證器 ,並指定 IrqlNtifsApcPassive 規則。

使用下列步驟來執行程式碼的分析:
  1. 準備程式代碼 (使用角色類型宣告) 。
  2. 執行靜態驅動程式驗證程式。
  3. 檢視和分析結果。

如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式中尋找瑕疵

运行时

您可以使用 Verifier.exe 命令列來啟用一或多個驅動程式的 DDI 合規性 - 其他 IRQL 規則。 如需詳細資訊,請參閱 選取驅動程式驗證器選項。 您必須重新啟動計算機,才能啟動或停用 DDI 合規性 - 其他 IRQL 規則。

在命令行中,DDI 合規性 - 其他 IRQL 檢查是以規則類別值 35 表示。 例如:

verifier /ruleclasses 35 /driver MyDriver.sys

OR

verifier /rc 35 /driver MyDriver.sys

計算機重新啟動之後,額外的 IRQL 檢查將會處於作用中狀態。

適用於

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite