Regola irqlZwPassive (wdm)
La regola IrqlZwPassive specifica che il driver chiama ZwClose solo quando viene eseguito in IRQL = PASSIVE_LEVEL.
Modello di driver: WDM
Verifica bug trovata con questa regola: Verifica bug 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x2001F )
Esempio
Il codice seguente viola questa regola:
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);
....
}
Come eseguire il test
In fase di compilazione |
---|
Eseguire il verifica driver statico e specificare la regola IrqlZwPassive . Usa i passaggi descritti di seguito per eseguire un'analisi del codice:
Per altre informazioni, vedere Uso del verificatore driver statico per trovare i difetti nei driver. |
In fase di esecuzione |
---|
Eseguire il verifica driver e selezionare l'opzione di controllo della conformità DDI . |
Si applica a
ZwCloseZwCreateKeyZwDeleteKeyZwEnumerateKeyZwEnumerateValueKeyZwFlushKeyZwOpenKeyZwQueryKey ZwQueryValueKeyZwQueryValueKeyKey