Règle IrqlNtifsApcPassive (wdm)

La règle IrqlNtifsApcPassive spécifie que le pilote appelle les DDIs répertoriés dans la règle uniquement lorsqu’il s’exécute à l’adresse IRQL = PASSIVE_LEVEL ou à IRQL <= APC_LEVEL.

Modèle de pilote : WDM

Bogues case activée trouvés avec cette règle : 0xC4 de vérification des bogues : DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)

Exemple

Le code suivant enfreint cette règle :

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

Pour plus d’informations sur les niveaux IRQL, consultez Répartition des routines et des IRQL et Gestion des priorités matérielles.

Comment tester

Au moment de la compilation

Exécutez Static Driver Verifier et spécifiez la règle IrqlNtifsApcPassive .

Utilisez les étapes suivantes pour exécuter l’analyse de votre code :
  1. Préparez votre code (utilisez les déclarations de type).
  2. Exécutez le vérificateur de pilote statique.
  3. Affichez et analysez les résultats.

Pour plus d’informations, consultez Utilisation du vérificateur de pilote statique pour rechercher des défauts dans les pilotes.

Au moment de l'exécution

Vous pouvez activer les règles DDI Compliance - IRQL supplémentaires pour un ou plusieurs pilotes à l’aide de la ligne de commande Verifier.exe. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote. Vous devez redémarrer l’ordinateur pour activer ou désactiver les règles de conformité DDI - IRQL supplémentaires.

Sur la ligne de commande, la vérification de conformité DDI - IRQL supplémentaire est représentée par une valeur de classe de règle de 35. Par exemple :

verifier /ruleclasses 35 /driver MyDriver.sys

OR

verifier /rc 35 /driver MyDriver.sys

La vérification IRQL supplémentaire sera active après le redémarrage du PC.

S’applique à

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite