Compartir a través de


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

CancelSpinLock

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.

CancelSpinlockRelease

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.

CriticalRegions

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).

ExclusiveResourceAccess

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.

GuardedRegions

La regla GuardedRegions comprueba que las llamadas a KeEnterGuardedRegion y KeLeaveGuardedRegion se usan en alternancia estricta.

QueuedSpinLock

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.

QueuedSpinLockRelease

La regla QueuedSpinLockRelease especifica que las llamadas a KeAcquireInStackQueuedSpinLock y KeReleaseInStackQueuedSpinLock se usan en alternancia estricta.

SpinLock

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.

SpinLockDpc

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.

SpinlockRelease

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.

SpinLockSafe

La regla SpinLockSafe especifica que no se llama a IoStartNextPacket e IoCompleteRequest mientras mantiene un bloqueo de número.

WithinCriticalRegion

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

  1. Seleccione el proyecto de controlador (.vcxProj) en Microsoft Visual Studio. En el menú Controlador , haga clic en Iniciar comprobador de controladores estáticos....

  2. 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).