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 :
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 :
OR
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