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 |
---|---|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
La regla RemoveLockForward comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP a otro dispositivo. |
|
La regla RemoveLockForward2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar el IRP a otro dispositivo. |
|
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. |
|
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. |
|
La regla RemoveLockForwardDeviceControlInternal comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo. |
|
La regla RemoveLockForwardDeviceControlInternal2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo. |
|
La regla RemoveLockForwardRead comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente. |
|
La regla RemoveLockForwardRead2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo. |
|
La regla RemoveLockForwardWrite comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo. |
|
La regla RemoveLockForwardWrite2 comprueba que las llamadas a IoAcquireRemoveLock e IoReleaseRemoveLock se usan correctamente al reenviar un IRP mediante IoCallDriver a otro dispositivo. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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
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 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).