Condividi tramite


Regola irqlNtifsApcPassive (wdm)

La regola IrqlNtifsApcPassive specifica che il driver chiama le DDI elencate nella regola solo quando viene eseguito in IRQL = PASSIVE_LEVEL o in IRQL <= APC_LEVEL.

Modello di driver: WDM

Verifica bug trovata con questa regola: Verifica bug 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024 )

Esempio

Il codice seguente viola questa regola:

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

Per altre informazioni sui livelli IRQL, vedere Routine di invio e IRQLs egestione delle priorità hardware.

Come eseguire il test

In fase di compilazione

Eseguire il verifica driver statico e specificare la regola IrqlNtifsApcPassive .

Usa i passaggi descritti di seguito per eseguire un'analisi del codice:
  1. Prepara il codice (usa dichiarazioni di tipo ruolo).
  2. Esegui Driver Verifier statico.
  3. Visualizza e analizza i risultati.

Per altre informazioni, vedere Uso del verificatore driver statico per trovare i difetti nei driver.

In fase di esecuzione

È possibile attivare le regole DDI Compliance - IrQL aggiuntive per uno o più driver usando la riga di comando Verifier.exe. Per informazioni dettagliate, vedere Selezione delle opzioni di verifica driver. È necessario riavviare il computer per attivare o disattivare la conformità DDI - Regole IRQL aggiuntive.

Nella riga di comando, il controllo di conformità DDI - Controllo IRQL aggiuntivo è rappresentato da un valore della classe di regola pari a 35. Ad esempio:

verifier /ruleclasses 35 /driver MyDriver.sys

OR

verifier /rc 35 /driver MyDriver.sys

Il controllo IRQL aggiuntivo sarà attivo dopo il riavvio del PC.

Si applica a

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite