Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez ces règles pour vérifier que votre pilote effectue des appels DDI au niveau de l’IRQL requis.
Un pilote qui ne suit pas les règles IRQL peut provoquer de graves problèmes pendant l’opération qui peuvent entraîner des blocages ou des blocages d’ordinateur.
Contenu de cette section
| Sujet | Description |
|---|---|
La règle ForwardedAtBadIrql spécifie que le pilote doit appeler IoCallDriver et PoCallDriver au DISPATCH_LEVEL IRQL<, sauf si le code de fonction principal IRP transféré est l’un des éléments suivants : |
|
La règle ForwardedAtBadIrqlAllocate spécifie que le pilote doit appeler IoCallDriver et PoCallDriver à <IRQLDISPATCH_LEVEL, sauf si le code de fonction majeur IRP transféré est l'un des suivants : |
|
La règle ForwardedAtBadIrqlFsdAsync spécifie que le pilote appelle IoCallDriver et PoCallDriver à IRQL<DISPATCH_LEVEL, sauf si le code de la fonction principale IRP transféré est l’un des éléments suivants : |
|
La règle ForwardedAtBadIrqlFsdSync spécifie que le pilote doit appeler IoCallDriver et PoCallDriver à IRQL<DISPATCH_LEVEL, sauf si le code de fonction majeur IRP transféré est l'un des suivants : |
|
La règle IrqlApcLte spécifie que le pilote appelle ObGetObjectSecurity et ObReleaseObjectSecurity uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL. |
|
La règle IrqlDispatch spécifie que le pilote appelle les DDI suivants uniquement lorsqu'il s'exécute à IRQL = DISPATCH_LEVEL. |
|
La règle IrqlExAllocatePool spécifie que le pilote appelle ExAllocatePoolWithTag et ExAllocatePoolWithTagPriority uniquement lorsqu’il s’exécute à IRQL<=DISPATCH_LEVEL. |
|
La règle IrqlExApcLte1 spécifie que le pilote appelle ExAcquireFastMutex et ExTryToAcquireFastMutex uniquement à IRQL <= APC_LEVEL. |
|
La règle IrqlExApcLte2 spécifie que le pilote appelle les routines suivantes uniquement à IRQL <= APC_LEVEL. |
|
La règle IrqlExApcLte3 spécifie que le pilote appelle les routines de support exécutif suivantes uniquement à IRQL <= APC_LEVEL. |
|
La règle IrqlExApcLteInline spécifie que les DDIs sont uniquement appelées à des niveaux IRQL appropriés |
|
La règle IrqlExFree1 spécifie que ExFreePool et ExFreePoolWithTag sont appelés à l’irQL approprié. |
|
La règle IrqlExFree2 spécifie que ExFreePool et ExFreePoolWithTag sont appelés à l’irQL approprié. |
|
La règle IrqlExFree3 spécifie que ExFreePool et ExFreePoolWithTag sont appelés à l’irQL approprié. |
|
La règle IrqlExPassive spécifie que le pilote appelle les routines de support exécutif suivantes uniquement à IRQL = PASSIVE_LEVEL : La règle IrqlExPassive spécifie également que le pilote appelle ExRaiseStatus à IRQL <= APC_LEVEL |
|
La règle IrqlIoApcLte spécifie que le pilote appelle les routines du gestionnaire d’E/S suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL : |
|
La règle IrqlIoDispatch spécifie que le pilote appelle les routines d’E/S suivantes uniquement lorsqu’il s’exécute à IRQL <= DISPATCH_LEVEL : IoGetDeviceToVerify, IoSetDeviceToVerify. |
|
La règle IrqlIoPassive1 spécifie que le pilote appelle les routines suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL : |
|
La règle IrqlIoPassive2 spécifie que le pilote appelle les routines du Gestionnaire d’E/S suivantes uniquement à IRQL = PASSIVE_LEVEL : |
|
La règle IrqlIoPassive3 spécifie que le pilote appelle les routines suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL : |
|
La règle IrqlIoPassive4 spécifie que le pilote appelle les routines suivantes uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL : |
|
La règle IrqlIoPassive5 spécifie que le pilote appelle des routines du Gestionnaire d'E/S spécifiques uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL. |
|
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. |
|
La règle IrqlKeApcLte1 spécifie que le pilote appelle les routines de noyau suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL : |
|
La règle IrqlKeApcLte2 spécifie que le pilote appelle les routines de noyau suivantes uniquement lorsqu’il s’exécute à IRQL <= APC_LEVEL : |
|
La règle IrqlKeDispatchLte spécifie que le pilote appelle les routines de noyau suivantes uniquement lorsqu’il s’exécute à IRQL <= DISPATCH_LEVEL : |
|
La règle IrqlKeRaiseLower spécifie que le pilote effectue les opérations suivantes lors de l'élévation et de l'abaissement de l’IRQL : Lorsque le pilote appelle KeRaiseIrql, il s’exécute à un irQL inférieur ou égal à la valeur du paramètre NewIrql .Le pilote appelle KeLowerIrql uniquement après avoir appelé KeRaiseIrql ou KeRaiseIrqlToDpcLevel. |
|
La règle IrqlKeRaiseLower2 spécifie que les pilotes utilisent KeLowerIrql pour restaurer l'IRQL d'origine levé par un appel précédent à KeRaiseIrql ou KeRaiseIrqlToDpcLevel. |
|
La règle IrqlKeReleaseSpinLock spécifie que le pilote appelle KeReleaseSpinLock uniquement lorsqu’il s’exécute à IRQL = DISPATCH_LEVEL. |
|
La règle IrqlKeSetEvent spécifie que la routine KeSetEvent est appelée uniquement à IRQL <= DISPATCH_LEVEL lorsque Wait est défini sur FALSE, et à IRQL <= APC_LEVEL lorsque Wait est défini sur TRUE. |
|
La règle IrqlKeWaitForMutexObject spécifie le pilote pour appeler la routine KeWaitForMutexObject à l’irQL appropriée en fonction de la valeur du paramètre Timeout : |
|
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 . |
|
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 : |
|
La règle IrqlMmDispatch spécifie que le pilote appelle MmFreeContiguousMemory uniquement lorsqu’il s’exécute à IRQL <= DISPATCH_LEVEL. |
|
La règle IIrqlNtifsApcPassive spécifie que le pilote appelle les DDI répertoriés dans la règle uniquement lorsqu'il s'exécute à IRQL = PASSIVE_LEVEL ou à IRQL = APC_LEVEL. |
|
La règle IrqlObPassive spécifie que le pilote appelle ObReferenceObjectByHandle uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL. |
|
La règle IrqlPsPassive spécifie que le pilote appelle les routines de structure de processus spécifiques uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL. |
|
La règle IrqlReturn spécifie que les routines de répartition du pilote retournent au même IRQL auquel elles ont été appelées. |
|
La règle IrqlRtlPassive spécifie que le pilote appelle RtlDeleteRegistryValue uniquement lorsqu’il s’exécute à IRQL = PASSIVE_LEVEL. |
|
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
Sélectionnez votre projet de pilote (.vcxProj) dans Microsoft Visual Studio. Dans le menu Pilote , cliquez sur Lancer le vérificateur de pilote statique....
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 du développeur Visual Studio, spécifiez Irql.sdv avec l’option /check . Par exemple:
msbuild /t:sdv /p:Inputs="/check:Irql.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Pour plus d’informations, veuillez consulter la section Utilisation de Static Driver Verifier pour rechercher des défauts dans les pilotes et les commandes MSBuild (Static Driver Verifier).