Conjunto de reglas de bloqueo (Storport)
Use estas reglas para comprobar que el controlador administra correctamente los recursos compartidos.
En esta sección
Tema | Descripción |
---|---|
La regla CancelSpinLock Rule (Storport) comprueba que cada llamada a IoAcquireCancelSpinLock va seguida de una llamada a IoReleaseCancelSpinLock. |
|
La regla QueuedSpinLock comprueba que los bloqueos de número en cola en la pila que se adquieren mediante KeAcquireInStackQueuedSpinLock se publican rápidamente mediante KeReleaseInStackQueuedSpinLock. Además, al final de una rutina de envío o cancelación, el controlador no debe contener ningún bloqueo. |
|
Esta regla comprueba que el controlador no llama a KeReleaseInStackQueuedSpinLock sin adquirir primero el bloqueo a través de KeAcquireInStackQueuedSpinLock. |
|
Esta regla comprueba que una llamada a KeAcquireSpinLock va seguida de una llamada a KeReleaseSpinlock. Si un controlador llama a KeAcquireSpinLockRaiseToDpc o KeAcquireSpinLock de nuevo antes de liberar el bloqueo, se produce un error en la regla. Además, antes de salir de la rutina de envío o cancelación, el controlador debe liberar el bloqueo de giro. |
|
Esta regla comprueba que una llamada a KeAcquireSpinLockRaiseToDpc se sigue rápidamente mediante una llamada a KeReleaseSpinlock. Si un controlador llama a KeAcquireSpinLock o KeAcquireSpinLockRaiseToDpc de nuevo antes de liberar el bloqueo, se produce un error en la regla. Además, antes de salir de la rutina de envío o cancelación, el controlador debe liberar el bloqueo de giro. |
|
Esta regla comprueba que el controlador no intenta liberar un bloqueo a través de KeReleaseSpinLock sin adquirirlo primero a través de KeAquireSpinlock o KeAcquireSpinLockRaiseToDpc. La regla pasa cuando se libera el bloqueo de número adquirido. |
|
Esta regla comprueba que no se llaman a las rutinas IoStartNextPacket e IoCompleteRequest mientras se mantiene un bloqueo de número. La regla realiza un seguimiento del número de bloqueos de giro mantenidos en cualquier momento y, si ese número no es 0 cuando se llama a ninguna rutina, el controlador produce un error en la regla. |
|
Los controladores miniport son necesarios para adquirir el bloqueo de número MSI para un mensaje si, y solo si, el miembro InterruptSynchronizationMode de la estructura PORT_CONFIGURATION_INFORMATION (Storport) se establece en InterruptSynchronizePerMessage. Esta regla comprueba que las llamadas a StorPortAcquireMSISpinLock solo se realizan si el modo de sincronización es InterruptSynchronizePerMessage. |
|
Esta regla comprueba que los bloqueos que se adquieren a través de StorPortAcquireSpinLock se liberan rápidamente a través de StorPortReleaseSpinLock. El controlador de minipuerto produce un error en la regla si intenta adquirir un bloqueo que ya había adquirido o si intenta liberar un bloqueo que no había adquirido. Además, al final de la rutina de envío o cancelación, el controlador no debe contener ningún bloqueo de giro. |
|
La regla StorPortSpinLock3 comprueba la jerarquía de adquisición de bloqueos que se describe en la documentación de la rutina StorPortAcquireSpinLock . |
|
Esta regla es el homólogo de lanzamiento de StorPortSpinLock. Es similar a la regla SpinLockRelease . |
Para seleccionar el conjunto de reglas de bloqueo
Seleccione el proyecto de controlador (.vcxProj) en Microsoft Visual Studio. En el menú Controlador , haga clic en Iniciar comprobador de controladores estáticos....
Haga clic en la pestaña Reglas . En Conjuntos de reglas, seleccione Bloquear.
Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema para desarrolladores de Visual Studio, especifique Locking.sdv con la opción /check . Por ejemplo:
msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Para obtener más información, consulte Uso del comprobador de controladores estáticos para buscar defectos en controladores y comandos comprobadores de controladores estáticos (MSBuild).