Partager via


Ensemble de règles IRQL (WDM)

Utilisez ces règles pour vérifier que votre pilote effectue des appels DDI à l’IRQL requis.

Un pilote qui ne suit pas les règles IRQL peut causer de graves problèmes pendant le fonctionnement, ce qui peut entraîner des conditions d’interblocage ou des plantages d’ordinateur.

Contenu de cette section

Rubrique Description

ForwardedAtBadIrql

La règle ForwardedAtBadIrql spécifie que le pilote doit appeler IoCallDriver et PoCallDriver au DISPATCH_LEVEL IRQL<, sauf si le code de fonction principale IRP transféré est l’un des éléments suivants :

ForwardedAtBadIrqlAllocate

La règle ForwardedAtBadIrqlAllocate spécifie que le pilote doit appeler IoCallDriver et PoCallDriver au DISPATCH_LEVEL IRQL<, sauf si le code de la fonction principale IRP transféré est l’un des éléments suivants :

ForwardedAtBadIrqlFsdAsync

La règle ForwardedAtBadIrqlFsdAsync spécifie que le pilote appelle IoCallDriver et PoCallDriver au DISPATCH_LEVEL IRQL<, sauf si le code de fonction principale IRP transféré est l’un des éléments suivants :

ForwardedAtBadIrqlFsdSync

La règle ForwardedAtBadIrqlFsdSync spécifie que le pilote appelle IoCallDriver et PoCallDriver au DISPATCH_LEVEL IRQL<, sauf si le code de la fonction principale IRP transféré est l’un des éléments suivants :

IrqlApcLte

La règle IrqlApcLte spécifie que le pilote appelle ObGetObjectSecurity et ObReleaseObjectSecurity uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL.

IrqlDispatch

La règle IrqlDispatch spécifie que le pilote appelle les DDIs suivants uniquement lorsqu’il s’exécute à IRQL = DISPATCH_LEVEL.

IrqlExAllocatePool

La règle IrqlExAllocatePool spécifie que le pilote appelle ExAllocatePoolWithTag et ExAllocatePoolWithTagPriority uniquement lorsqu’il s’exécute à IRQL<=DISPATCH_LEVEL.

IrqlExApcLte1

La règle IrqlExApcLte1 spécifie que le pilote appelle ExAcquireFastMutex et ExTryToAcquireFastMutex uniquement à IRQL <= APC_LEVEL.

IrqlExApcLte2

La règle IrqlExApcLte2 spécifie que le pilote appelle les routines suivantes uniquement à IRQL <= APC_LEVEL.

IrqlExApcLte3

La règle IrqlExApcLte3 spécifie que le pilote appelle les routines de support exécutif suivantes uniquement à IRQL <= APC_LEVEL.

IrqlExApcLteInline

La règle IrqlExApcLteInline spécifie que les DDIs ne sont appelés qu’aux niveaux IRQL appropriés

IrqlExFree1

La règle IrqlExFree1 spécifie qu’ExFreePool et ExFreePoolWithTag sont appelés au niveau de l’IRQL approprié.

IrqlExFree2

La règle IrqlExFree2 spécifie qu’ExFreePool et ExFreePoolWithTag sont appelés au niveau de l’IRQL approprié.

IrqlExFree3

La règle IrqlExFree3 spécifie qu’ExFreePool et ExFreePoolWithTag sont appelés au niveau de l’IRQL approprié.

IrqlExPassive

La règle IrqlExPassive spécifie que le pilote appelle les routines de support de l’exécutif suivantes uniquement à IRQL = PASSIVE_LEVEL :

La règle IrqlExPassive spécifie également que le pilote appelle ExRaiseStatus à IRQL <= APC_LEVEL

IrqlIoApcLte

La règle IrqlIoApcLte spécifie que le pilote appelle les routines de gestionnaire d’E/S suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL :

IrqlIoDispatch

La règle IrqlIoDispatch spécifie que le pilote appelle les routines suivantes du Gestionnaire d’E/S uniquement lorsqu’il s’exécute à IRQL <= DISPATCH_LEVEL : IoGetDeviceToVerify, IoSetDeviceToVerify.

IrqlIoPassive1

La règle IrqlIoPassive1 spécifie que le pilote appelle les routines suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL :

IrqlIoPassive2

La règle IrqlIoPassive2 spécifie que le pilote appelle les routines suivantes du Gestionnaire d’E/S uniquement dans IRQL = PASSIVE_LEVEL :

IrqlIoPassive3

La règle IrqlIoPassive3 spécifie que le pilote appelle les routines suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL :

IrqlIoPassive4

La règle IrqlIoPassive4 spécifie que le pilote appelle les routines suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL :

IrqlIoPassive5

La règle IrqlIoPassive5 spécifie que le pilote appelle des routines spécifiques du Gestionnaire d’E/S uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL.

IrqlIoRtlZwPassive

La règle IrqlIoRtlZwPassive spécifie que le pilote appelle des routines spécifiques du Gestionnaire d’E/S uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL.

IrqlKeApcLte1

La règle IrqlKeApcLte1 spécifie que le pilote appelle les routines de noyau suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL :

IrqlKeApcLte2

La règle IrqlKeApcLte2 spécifie que le pilote appelle les routines de noyau suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL :

IrqlKeDispatchLte

La règle IrqlKeDispatchLte spécifie que le pilote appelle les routines de noyau suivantes uniquement lorsqu’il s’exécute à IRQL <= DISPATCH_LEVEL :

IrqlKeRaiseLower

La règle IrqlKeRaiseLower spécifie que le pilote effectue les opérations suivantes lors de la levée et de la baisse de l’IRQL :

Lorsque le pilote appelle KeRaiseIrql, il s’exécute sur un IRQL inférieur ou égal à la valeur du paramètre NewIrql .
Le pilote appelle KeLowerIrql uniquement après avoir appelé KeRaiseIrql ou KeRaiseIrqlToDpcLevel.

IrqlKeRaiseLower2

La règle IrqlKeRaiseLower2 spécifie que les pilotes utilisent KeLowerIrql pour restaurer l’IRQL d’origine déclenché par un appel précédent à KeRaiseIrql ou KeRaiseIrqlToDpcLevel.

IrqlKeReleaseSpinLock

La règle IrqlKeReleaseSpinLock spécifie que le pilote appelle KeReleaseSpinLock uniquement lorsqu’il s’exécute à IRQL = DISPATCH_LEVEL.

IrqlKeSetEvent

La règle IrqlKeSetEvent spécifie que la routine KeSetEvent est appelée uniquement à IRQL <= DISPATCH_LEVEL lorsque Wait a la valeur FALSE et à IRQL <= APC_LEVEL lorsque Wait a la valeur TRUE.

IrqlKeWaitForMutexObject

La règle IrqlKeWaitForMutexObject spécifie le pilote pour appeler la routine KeWaitForMutexObject à l’IRQL approprié en fonction de la valeur du paramètre Timeout :

IrqlKeWaitForMultipleObjects

La règle IrqlKeWaitForMultipleObjects spécifie que les appelants de la routine KeWaitForMultipleObjects doivent s’exécuter à l’IRQL approprié en fonction du paramètre Timeout .

IrqlMmApcLte

La règle IrqlMmApcLte spécifie que le pilote appelle les routines de gestionnaire de mémoire suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL :

IrqlMmDispatch

La règle IrqlMmDispatch spécifie que le pilote appelle MmFreeContiguousMemory uniquement lorsqu’il s’exécute à l’adresse IRQL <= DISPATCH_LEVEL.

IrqlNtifsApcPassive

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

IrqlObPassive

La règle IrqlObPassive spécifie que le pilote appelle ObReferenceObjectByHandle uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL.

IrqlPsPassive

La règle IrqlPsPassive spécifie que le pilote appelle les routines de structure de processus suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL :

IrqlReturn

La règle IrqlReturn spécifie que les routines de dispatch du pilote retournent au même IRQL que celui auquel elles ont été appelées.

IrqlRtlPassive

La règle IrqlRtlPassive spécifie que le pilote appelle RtlDeleteRegistryValue uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL.

IrqlZwPassive

La règle IrqlZwPassive spécifie que le pilote appelle ZwClose uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL.

Pour sélectionner l’ensemble de règles Irql

  1. Sélectionnez votre projet de pilote (.vcxProj) dans Microsoft Visual Studio. Dans le menu Pilote , cliquez sur Lancer le vérificateur de pilote statique....

  2. Cliquez sur l’onglet Règles . Sous Ensembles de règles, sélectionnez Irql.

    Pour sélectionner l’ensemble de règles par défaut à partir d’une fenêtre d’invite de commandes développeur Visual Studio, spécifiez Irql.sdv avec l’option /case activée. Par exemple :

    msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Pour plus d’informations, consultez Utilisation du vérificateur de pilote statique pour rechercher des défauts dans les pilotes et commandes MSBuild (Static Driver Verifier).