Ensemble de règles de verrouillage (WDM)
Utilisez ces règles pour vérifier que votre pilote gère correctement les ressources partagées.
Contenu de cette section
Rubrique | Description |
---|---|
La règle CancelSpinLock spécifie que le pilote appelle IoAcquireCancelSpinLock avant d’appeler IoReleaseCancelSpinLock et que le pilote appelle IoReleaseCancelSpinLock avant tout appel ultérieur à IoAcquireCancelSpinLock. |
|
La règle CancelSpinlockRelease spécifie que les appels à IoAcquireCancelSpinLock et IoReleaseCancelSpinLock sont utilisés en alternance stricte. Autrement dit, chaque appel à IoAcquireCancelSpinLock doit avoir un appel correspondant à IoReleaseCancelSpinLock. |
|
La règle CriticalRegions spécifie que le pilote doit appeler KeEnterCriticalRegion avant d’appeler KeLeaveCriticalRegion et que le pilote appelle KeLeaveCriticalRegion avant tout appel ultérieur à KeEnterCriticalRegion. (Les appels imbriqués sont autorisés.) |
|
La règle ExclusiveResourceAccess spécifie que le pilote appelle ExAcquireResourceExclusiveLite avant d’appeler ExReleaseResourceLite ou ExReleaseResourceForThreadLite et spécifie que le pilote appelle ExReleaseResourceLite ou ExReleaseResourceForThreadLite avant tout appel ultérieur à ExAcquireResourceExclusiveLite. |
|
La règle GuardedRegions vérifie que les appels à KeEnterGuardedRegion et KeLeaveGuardedRegion sont utilisés en alternance stricte. |
|
La règle QueuedSpinLock spécifie que le pilote appelle KeAcquireInStackQueuedSpinLock avant d’appeler KeReleaseInStackQueuedSpinLock et que le pilote appelle KeReleaseInStackQueuedSpinLock avant tout appel ultérieur à KeAcquireInStackQueuedSpinLock. |
|
La règle QueuedSpinLockRelease spécifie que les appels à KeAcquireInStackQueuedSpinLock et KeReleaseInStackQueuedSpinLock sont utilisés en alternance stricte. |
|
La règle SpinLock spécifie qu’après avoir appelé KeAcquireSpinLock, le pilote appelle KeReleaseSpinLock avant les appels suivants à KeAcquireSpinLock ou à KeAcquireSpinLockRaiseToDpc. |
|
La règle SpinLockDpc spécifie que les appels à KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc et KeReleaseSpinLock doivent être effectués en alternance stricte. Autrement dit, après avoir appelé KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc, le pilote doit appeler KeReleaseSpinLock avant les appels suivants à KeAcquireSpinLock ou à KeAcquireSpinLockRaiseToDpc. |
|
La règle SpinlockRelease spécifie que les appels à KeReleaseSpinLock sont effectués en alternance stricte avec KeAcquireSpinLock et KeAcquireSpinLockRaiseToDpc. Autrement dit, le pilote doit appeler KeReleaseSpinLock après avoir appelé KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc et avant les appels suivants à KeAcquireSpinLock ou à KeAcquireSpinLockRaiseToDpc. |
|
La règle SpinLockSafe spécifie qu’IoStartNextPacket et IoCompleteRequest ne sont pas appelés en tenant un verrou de rotation. |
|
La règle WithinCriticalRegion spécifie que les appels du pilote à des fonctions de synchronisation particulières s’affichent uniquement après l’appel de KeEnterCriticalRegion et avant l’appel de KeLeaveCriticalRegion. Les fonctions de synchronisation affectées sont les suivantes : |
Pour sélectionner l’ensemble de règles de verrouillage
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 Verrouillage.
Pour sélectionner l’ensemble de règles par défaut dans une fenêtre d’invite de commandes du développeur Visual Studio, spécifiez Locking.sdv avec l’option /case activée. Par exemple :
msbuild /t:sdv /p:Inputs="/check:Locking.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).