IrqlZwPassive-Regel (wdm)
Die IrqlZwPassive-Regel gibt an, dass der Treiber ZwClose nur aufruft, wenn er mit IRQL = PASSIVE_LEVEL ausgeführt wird.
Treibermodell: WDM
Fehlerüberprüfungen mit dieser Regel gefunden: Fehlerüberprüfung 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x2001F)
Beispiel
Der folgende Code verstößt gegen diese Regel:
NTSTATUS
DriverCloseResources (
_In_ PDRIVER_CONTEXT Context
)
{
…
NT_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
//
// ExAcquireFastMutex sets the IRQL to APC_LEVEL, and the caller continues
// to run at APC_LEVEL after ExAcquireFastMutex returns.
//
ExAcquireFastMutex(&Context->FastMutex);
....
if (NULL != Context->Handle) {
//
// RULE VIOLATION! - ZwClose can be called only at PASSIVE_LEVEL
//
ZwClose(Context->Handle);
Context->Handle = NULL;
}
....
//
// N.B. ExReleaseFastMutex restores the original IRQL.
//
ExReleaseFastMutex(&Context->FastMutex);
....
}
So führen Sie einen Test durch
Beim Kompilieren: |
---|
Führen Sie Static Driver Verifier aus , und geben Sie die IrqlZwPassive-Regel an. Gehen Sie folgendermaßen vor, um Ihren Code zu analysieren:
Weitere Informationen finden Sie unter Verwenden der statischen Treiberüberprüfung, um Fehler in Treibern zu finden. |
Zur Laufzeit |
---|
Führen Sie Driver Verifier aus, und wählen Sie die Option DDI-Konformitätsüberprüfung aus . |
Gilt für:
ZwCloseZwCreateKeyZwDeleteKeyZwEnumerateKeyZwEnumerateValueKeyZwFlushKeyZwOpenKeyZwQueryKeyZwQueryValueKeyZwSetValueKey