Conjunto de reglas de bloqueo (WDM)
Use estas reglas para comprobar que el controlador administra correctamente los recursos compartidos.
En esta sección
Tema | Descripción |
---|---|
La regla CancelSpinLock especifica que el controlador llama a IoAcquireCancelSpinLock antes de llamar a IoReleaseCancelSpinLock y que el controlador llama a IoReleaseCancelSpinLock antes de cualquier llamada posterior a IoAcquireCancelSpinLock. |
|
La regla CancelSpinlockRelease especifica que las llamadas a IoAcquireCancelSpinLock y IoReleaseCancelSpinLock se usan en alternancia estricta. Es decir, cada llamada a IoAcquireCancelSpinLock debe tener una llamada correspondiente a IoReleaseCancelSpinLock. |
|
La regla CriticalRegions especifica que el controlador debe llamar a KeEnterCriticalRegion antes de llamar a KeLeaveCriticalRegion y que el controlador llama a KeLeaveCriticalRegion antes de cualquier llamada posterior a KeEnterCriticalRegion. (Se permiten llamadas anidadas). |
|
La regla ExclusiveResourceAccess especifica que el controlador llama a ExAcquireResourceExclusiveLite antes de llamar a ExReleaseResourceLite o ExReleaseResourceForThreadLite y especifica que el controlador llama a ExReleaseResourceLite o ExReleaseResourceForThreadLite antes de cualquier llamada posterior a ExAcquireResourceExclusiveLite. |
|
La regla GuardedRegions comprueba que las llamadas a KeEnterGuardedRegion y KeLeaveGuardedRegion se usan en alternancia estricta. |
|
La regla QueuedSpinLock especifica que el controlador llama a KeAcquireInStackQueuedSpinLock antes de llamar a KeReleaseInStackQueuedSpinLock y que el controlador llama a KeReleaseInStackQueuedSpinLock antes de cualquier llamada posterior a KeAcquireInStackQueuedSpinLock. |
|
La regla QueuedSpinLockRelease especifica que las llamadas a KeAcquireInStackQueuedSpinLock y KeReleaseInStackQueuedSpinLock se usan en alternancia estricta. |
|
La regla SpinLock especifica que, después de llamar a KeAcquireSpinLock, el controlador llama a KeReleaseSpinLock antes de las llamadas posteriores a KeAcquireSpinLock o a KeAcquireSpinLockRaiseToDpc. |
|
La regla SpinLockDpc especifica que las llamadas a KeAcquireSpinLock o KeAcquireSpinLockRaiseToDpc y KeReleaseSpinLock deben realizarse en alternancia estricta. Es decir, después de llamar a KeAcquireSpinLock o KeAcquireSpinLockRaiseToDpc, el controlador debe llamar a KeReleaseSpinLock antes de las siguientes llamadas a KeAcquireSpinLock o a KeAcquireSpinLockRaiseToDpc. |
|
La regla SpinlockRelease especifica que las llamadas a KeReleaseSpinLock se realizan en una alternancia estricta con KeAcquireSpinLock y KeAcquireSpinLockRaiseToDpc. Es decir, el controlador debe llamar a KeReleaseSpinLock después de llamar a KeAcquireSpinLock o KeAcquireSpinLockRaiseToDpc y antes de las llamadas posteriores a KeAcquireSpinLock o a KeAcquireSpinLockRaiseToDpc. |
|
La regla SpinLockSafe especifica que no se llama a IoStartNextPacket e IoCompleteRequest mientras mantiene un bloqueo de número. |
|
La regla WithinCriticalRegion especifica que las llamadas del controlador a funciones de sincronización concretas solo aparecen después de llamar a KeEnterCriticalRegion y antes de llamar a KeLeaveCriticalRegion. Las funciones de sincronización afectadas son las siguientes: |
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 Bloqueo.
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 de comprobador de controladores estáticos (MSBuild).