Compartir a través de


Conjunto de reglas de irpTracking (WDM)

Use estas reglas para comprobar que el controlador realiza un seguimiento correcto de los paquetes de solicitud de E/S (IRP) para que el dispositivo no se quite mientras los IRP están pendientes.

En esta sección

Tema Descripción

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

La regla IoReleaseRemoveLockAndWaitOutsideRemoveDevice especifica que no se debe llamar a IoReleaseRemoveLockAndWait fuera de IRP_MJ_PNP con IRP_MN_REMOVE_DEVICE para un controlador PnP.

NsRemoveLockMnRemove

La regla NsRemoveLockMnRemove comprueba que un controlador no devuelve STATUS_NOT_SUPPORTED al procesar IRP_MJ_PNP con MinorFunction IRP_MN_REMOVE_DEVICE. Esta regla solo se aplica a los controladores FDO y FIDO.

NsRemoveLockMnSurpriseRemove

La regla NsRemoveLockMnSurpriseRemove comprueba que un controlador no devuelve STATUS_NOT_SUPPORTED al procesar una solicitud de IRP_MJ_PNP con minorFunction IRP_MN_SUPRISE_REMOVAL. Esta regla solo se aplica a los controladores FDO y FIDO.

NsRemoveLockQueryMnRemove

La regla NsRemoveLockQueryMnRemove comprueba que un controlador no devuelve STATUS_NOT_SUPPORTED al procesar IRP_MJ_PNP con MinorFunction IRP_MN_QUERY_REMOVE. Esta regla solo se aplica a los controladores FDO y FIDO.

RemoveLock

La regla RemoveLock especifica que las llamadas a IoAcquireRemoveLock y IoReleaseRemoveLock se usan correctamente. Además, al final de la rutina de IRP_MJ_PNP o IRP_MJ_POWER, el controlador no debe contener removeLock.

RemoveLockCheck

La regla RemoveLockCheck comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait se usan correctamente al procesar IRP_MJ_PNP con MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockForward

La regla RemoveLockForward comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP a otro dispositivo.

RemoveLockForward2

La regla RemoveLockForward2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar el IRP a otro dispositivo.

RemoveLockForwardDeviceControl

La regla RemoveLockForwardDeviceControl comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente cuando el controlador usa IoCallDriver para reenviar un IRP a otro dispositivo.

RemoveLockForwardDeviceControl2

La regla RemoveLockForwardDeviceControl2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente cuando el controlador usa IoCallDriver para reenviar un IRP a otro dispositivo.

RemoveLockForwardDeviceControlInternal

La regla RemoveLockForwardDeviceControlInternal comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo.

RemoveLockForwardDeviceControlInternal2

La regla RemoveLockForwardDeviceControlInternal2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo.

RemoveLockForwardRead

La regla RemoveLockForwardRead comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente.

RemoveLockForwardRead2

La regla RemoveLockForwardRead2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo.

RemoveLockForwardWrite

La regla RemoveLockForwardWrite comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo.

RemoveLockForwardWrite2

La regla RemoveLockForwardWrite2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo.

RemoveLockMnRemove

La regla RemoveLockMnRemove comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait se usan correctamente al procesar IRP_MJ_PNP con MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockMnRemove2

La regla RemoveLockMnRemove2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait se usan correctamente al procesar IRP_MN_REMOVE_DEVICE solicitud antes de que el IRP se reenvíe a controladores inferiores.

RemoveLockMnSurpriseRemove

La regla RemoveLockMnSurpriseRemove comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait se usan correctamente al procesar IRP_MJ_PNP con MinorFunction IRP_MN_SUPRISE_REMOVAL. El controlador debe adquirir el bloqueo de eliminación antes de reenviar el IRP a la pila.

RemoveLockQueryMnRemove

La regla RemoveLockQueryMnRemove comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al procesar IRP_MJ_PNP con MinorFunction IRP_MN_QUERY_REMOVE_DEVICE. El controlador debe adquirir el bloqueo de eliminación antes de reenviar el IRP a la pila.

RemoveLockRelease2

La regla RemoveLockRelease2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseCleanup

La regla RemoveLockReleaseCleanup especifica que las llamadas a IoAcquireRemoveLock y IoReleaseRemoveLock se usan en alternancia estricta. Cada llamada a IoAcquireRemoveLock debe tener una llamada coincidente a IoReleaseRemoveLock. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseClose

La regla RemoveLockReleaseClose comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseCreate

La regla RemoveLockReleaseCreate comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseDeviceControl

La regla RemoveLockReleaseDeviceControl comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseInternalDeviceControl

La regla RemoveLockReleaseInternalDeviceControl comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en una alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleasePnp

La regla RemoveLockReleasePnp comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleasePower

La regla RemoveLockReleasePower comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseRead

La regla RemoveLockReleaseRead comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseShutdown

La regla RemoveLockReleaseShutdown comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseSystemControl

La regla RemoveLockReleaseSystemControl comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en una alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

RemoveLockReleaseWrite

La regla RemoveLockReleaseWrite comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan en la alternancia estricta. Además, al final de la rutina de envío, el controlador no debe contener el bloqueo de eliminación.

Para seleccionar el conjunto de reglas IrpTracking

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

    Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema para desarrolladores de Visual Studio, especifique IrpTracking.sdv con la opción /check . Por ejemplo:

    msbuild /t:sdv /p:Inputs="/check:IrpTracking.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).