Ensemble de règles de verrouillage (Storport)
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 Rule (Storport) vérifie que chaque appel à IoAcquireCancelSpinLock est rapidement suivi d’un appel à IoReleaseCancelSpinLock. |
|
La règle QueuedSpinLock vérifie que les verrous de rotation en file d’attente dans la pile acquis à l’aide de KeAcquireInStackQueuedSpinLock sont libérés rapidement à l’aide de KeReleaseInStackQueuedSpinLock. En outre, à la fin d’une routine de distribution ou d’annulation, le pilote ne doit pas contenir de verrous. |
|
Cette règle vérifie que le pilote n’appelle pas KeReleaseInStackQueuedSpinLock sans avoir d’abord acquis le verrou via KeAcquireInStackQueuedSpinLock. |
|
Cette règle vérifie qu’un appel à KeAcquireSpinLock est rapidement suivi d’un appel à KeReleaseSpinlock. Si un pilote appelle à nouveau KeAcquireSpinLockRaiseToDpc ou KeAcquireSpinLock avant de libérer le verrou, il échoue à la règle. En outre, avant de quitter la routine de distribution ou d’annulation, le pilote doit relâcher le verrou de rotation. |
|
Cette règle vérifie qu’un appel à KeAcquireSpinLockRaiseToDpc est rapidement suivi d’un appel à KeReleaseSpinlock. Si un pilote appelle à nouveau KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc avant de libérer le verrou, il échoue à la règle. En outre, avant de quitter la routine de distribution ou d’annulation, le pilote doit relâcher le verrou de rotation. |
|
Cette règle vérifie que le pilote ne tente pas de libérer un verrou via KeReleaseSpinLock sans l’acquérir au préalable via KeAquireSpinlock ou KeAcquireSpinLockRaiseToDpc. La règle réussit lorsque le verrou de rotation acquis est libéré. |
|
Cette règle vérifie que les routines IoStartNextPacket et IoCompleteRequest ne sont pas appelées en tenant un verrou de rotation. La règle effectue le suivi du nombre de verrous de rotation maintenus à tout moment, et si ce nombre n’est pas 0 lorsque l’une ou l’autre routine est appelée, le pilote échoue à la règle. |
|
Les pilotes Miniport sont requis pour acquérir le verrou de rotation MSI pour un message si, et seulement si, le membre InterruptSynchronizationMode de la structure PORT_CONFIGURATION_INFORMATION (Storport) est défini sur InterruptSynchronizePerMessage. Cette règle vérifie que les appels à StorPortAcquireMSISpinLock sont effectués uniquement si le mode de synchronisation est InterruptSynchronizePerMessage. |
|
Cette règle vérifie que les verrous acquis via StorPortAcquireSpinLock sont libérés rapidement via StorPortReleaseSpinLock. Le pilote miniport échoue à la règle s’il tente d’acquérir un verrou qu’il avait déjà acquis, ou s’il tente de libérer un verrou qu’il n’avait pas acquis. En outre, à la fin de la routine de distribution ou d’annulation, le pilote ne doit pas contenir de verrous de rotation. |
|
La règle StorPortSpinLock3 vérifie la hiérarchie d’acquisition de verrous décrite dans la documentation de la routine StorPortAcquireSpinLock . |
|
Cette règle est l’équivalent de la version de StorPortSpinLock. Elle est similaire à la règle SpinLockRelease . |
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 à partir d’une fenêtre d’invite de commandes 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).