Freigeben über


IrqlNtifsApcPassive-Regel (wdm)

Die IrqlNtifsApcPassive-Regel gibt an, dass der Treiber die in der Regel aufgeführten DDIs nur aufruft, wenn er entweder bei IRQL = PASSIVE_LEVEL oder unter IRQL <= APC_LEVEL ausgeführt wird.

Treibermodell: WDM

Fehlerüberprüfung(en) mit dieser Regel gefunden: Fehlerprüfung 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)

Beispiel

Der folgende Code verstößt gegen diese Regel:

//
// 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);

Weitere Informationen zu IRQL-Ebenen finden Sie unter Dispatch Routines und IRQLs und Verwalten von Hardwareprioritäten.

So führen Sie einen Test durch

Beim Kompilieren:

Führen Sie Static Driver Verifier aus, und geben Sie die IrqlNtifsApcPassive-Regel an .

Gehen Sie folgendermaßen vor, um Ihren Code zu analysieren:
  1. Bereiten Sie den Code vor (verwenden Sie Rollentypdeklarationen).
  2. Führen Sie Static Driver Verifier aus.
  3. Überprüfen und analysieren Sie die Ergebnisse.

Weitere Informationen finden Sie unter Verwenden der statischen Treiberüberprüfung, um Fehler in Treibern zu finden.

Zur Laufzeit

Sie können die DDI-Kompatibilität – Zusätzliche IRQL-Regeln für einen oder mehrere Treiber aktivieren, indem Sie die befehlszeile Verifier.exe verwenden. Weitere Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen. Sie müssen den Computer neu starten, um die DDI-Kompatibilität – Zusätzliche IRQL-Regeln zu aktivieren oder zu deaktivieren.

In der Befehlszeile wird DDI Compliance – Zusätzliche IRQL-Überprüfung durch den Regelklassenwert 35 dargestellt. Beispiel:

verifier /ruleclasses 35 /driver MyDriver.sys

oder

verifier /rc 35 /driver MyDriver.sys

Die zusätzliche IRQL-Überprüfung ist nach dem Neustart des PCs aktiv.

Gilt für:

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite