Compartir a través de


Conjunto de reglas de bloqueo (KMDF)

Use estas reglas para comprobar que el controlador administra correctamente los recursos compartidos.

En esta sección

Tema Descripción

ParentObjectCheckLock

La regla ParentObjectCheckLock especifica que el controlador debe llamar a WdfWaitLockCreate y WdfSpinLockCreate estableciendo un objeto primario.

ReqSendWhileSpinlock

La regla ReqSendWhileSpinlock especifica que no se envían solicitudes mientras el controlador contiene un interbloqueo.

Spinlock

La regla Spinlock especifica que las llamadas a KeAcquireSpinLock o KeAcquireSpinLockRaiseToDpc y KeReleaseSpinlock se usan en alternancia estricta.

SpinlockDpc

La regla SpinlockDpc especifica que las llamadas a KeAcquireSpinLock o KeAcquireSpinLockRaiseToDpc y KeReleaseSpinlock se usan en alternancia estricta.

SpinlockRelease

La regla SpinlockRelease especifica que las llamadas a KeAcquireSpinLock, KeAcquireSpinLockRaiseToDpc y KeReleaseSpinLock se usan de forma equilibrada dentro de una devolución de llamada de KMDF. Al final de cualquier rutina de devolución de llamada de KMDF, el controlador no debe mantener el bloqueo de giro.

WdfInterruptLock

La regla WdfInterruptLock especifica que las llamadas al método WdfInterruptAcquireLock se usan en alternancia estricta con llamadas a WdfInterruptReleaseLock. Además, al final de cualquier rutina de devolución de llamada de KMDF, el controlador no debe contener el objeto de bloqueo de número de marco, obtenido por una llamada anterior a WdfInterruptAcquireLock.

WdfInterruptLockRelease

La regla WdfInterruptLockRelease especifica que las llamadas a WdfInterruptAcquireLock y WdfInterruptReleaseLock se usan de forma equilibrada dentro de una rutina de devolución de llamada de KMDF. Al final de cualquier rutina de devolución de llamada de KMDF, el controlador no debe contener el objeto de bloqueo de número de marco obtenido por una llamada anterior a WdfInterruptAcquireLock.

WdfSpinlock

La regla WdfSpinlock especifica que las llamadas al método WdfSpinLockAcquire se usan en alternancia estricta con WdfSpinlockRelease. Al final de cualquier rutina de devolución de llamada de KMDF, el controlador no debe contener el objeto de interbloqueo del marco obtenido por una llamada anterior a WdfSpinLockAcquire.

WdfSpinlockRelease

La regla WdfSpinlockRelease especifica que las llamadas a WdfSpinLockAcquire y WdfSpinlockRelease se usan de forma equilibrada dentro de una función de devolución de llamada de eventos KMDF. Cuando se devuelve la función de devolución de llamada de evento KMDF, el controlador no debe contener el objeto de bloqueo de número de marco obtenido por una llamada anterior a WdfSpinLockAcquire.

WdfWaitlock

La regla WdfWaitlock especifica que las llamadas a WdfWaitLockAcquire se usan en alternancia estricta con WdfWaitlockRelease. Cuando se devuelve la función de devolución de llamada de evento KMDF, el controlador no debe contener el objeto de bloqueo de número de marco obtenido por una llamada anterior a WdfWaitLockAcquire.

WdfWaitlockRelease

La regla WdfWaitlockRelease especifica que las llamadas a WdfWaitLockAcquire y WdfWaitLockRelease se usan de forma equilibrada dentro de una función de devolución de llamada de eventos KMDF. Cuando se devuelve la función de devolución de llamada de evento KMDF, el controlador no debe contener el objeto de bloqueo de número de marco obtenido por una llamada anterior a WdfWaitLockAcquire.

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