Conjunto de reglas irpProcessing (WDM)
Use estas reglas para comprobar que el controlador procesa correctamente los paquetes de solicitud de E/S (IRP).
En esta sección
Tema | Descripción |
---|---|
La regla CompleteRequest comprueba que no se llama a la rutina IoCompleteRequest después de que se ejecute una rutina de finalización y que no devuelva STATUS_MORE_PROCESSING_REQUIRED. |
|
La regla CompleteRequestStatusCheck comprueba que el valor de estado de E/S del IRP coincide con el valor de estado devuelto por el controlador inferior. |
|
La regla CompletionRoutineRegistered especifica que si la rutina de envío registra una rutina de IoCompletion mediante IoSetCompletionRoutineEx, la rutina de distribución debe llamar a IoCallDriver o PoCallDriver. |
|
La regla DoubleCompletion (WDM) especifica que el controlador no debe llamar a la rutina IoCompleteRequest dos veces para el mismo IRP. |
|
La regla IoReuseIrp especifica que un controlador debe usar IoReuseIrp solo en irP asignados previamente con IoAllocateIrp. |
|
La regla IoReuseIrp2 especifica que un controlador debe usar IoReuseIrp solo en irP asignados anteriormente dentro del controlador. |
|
La regla IoSetCompletionExCompleteIrp especifica que la rutina IoSetCompletionRoutineEx devuelve un valor NTSTATUS. El controlador debe comprobar este valor para determinar si la rutina de IoCompletion se registró correctamente antes de llamar a IoCallDriver o PoCallDriver y si Se produce un error en IoSetCompletionRoutineEx , el IRP debe completarse y la rutina de envío debe devolverse. |
|
La regla IoSetCompletionRoutineExCheck especifica que la rutina IoSetCompletionRoutineEx devuelve un valor NTSTATUS. El controlador debe comprobar este valor para determinar si la rutina de IoCompletion se registró correctamente antes de llamar a IoCallDriver o PoCallDriver. |
|
La regla IoSetCompletionRoutineExCheckDeviceObject especifica que si el objeto de dispositivo actual no se pasa a IoSetCompletionRoutineEx y el objeto de dispositivo inferior es , esto puede provocar una condición de carrera en la que se podría descargar el objeto de dispositivo actual aunque la rutina de finalización no se haya ejecutado. |
|
La regla IoSetCompletionRoutineNonPnpDriver especifica que los controladores que no son controladores PnP deben usar IoSetCompletionRoutineEx no IoSetCompletionRoutineRoutine. |
|
La regla IrpCancelField especifica que el controlador comprueba el valor del miembro Irp-Cancel> al establecer una rutina de cancelación en un IRP que tiene el lápiz. |
|
La regla IrpProcessingComplete especifica que si una rutina de distribución devuelve STATUS_SUCCESS, el IRP debe haber sido completado por el propio controlador o por un controlador de nivel inferior. |
|
La regla LowerDriverReturn especifica que después de usar PoCallDriver o IoCallDriver para llamar a un controlador inferior, el controlador guarda el estado devuelto de la llamada y pasa el estado devuelto que recibió a la rutina de envío. |
|
La regla SignalEventInCompletion especifica que, al procesar un IRP asincrónico, el controlador debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned>. |
|
La regla SignalEventInCompletion2 especifica que, al procesar un IRP asincrónico, el controlador debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned>. |
|
La regla SignalEventInCompletion3 especifica que, al procesar un IRP asincrónico, el controlador debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned>. |
|
La regla StartIoCancel especifica que el controlador no debe llamar a IoSetStartIoAttributes con el parámetro NonCancelable establecido en FALSE antes de llamar a IoSetCancelRoutine con una rutina Cancel que no sea NULL. |
|
La regla StartIoRecursion especifica que si la rutina StartIo de un controlador incluye una llamada a IoStartNextPacket, el controlador primero debe llamar a IoSetStartIoAttributes con el atributo DeferredStartIo establecido en TRUE. De lo contrario, la recursividad infinita puede dar lugar. |
|
La regla PnpRemove especifica que el controlador no puede completar IRP_MN_SURPRISE_REMOVAL, IRP_MN_CANCEL_REMOVE_DEVICE, IRP_MN_CANCEL_STOP_DEVICE o solicitudes de IRP_MN_REMOVE_DEVICE con un error. |
|
La regla PnpSurpriseRemove especifica que el controlador no llama a IoDeleteDevice o IoDetachDevice mientras procesa una solicitud de IRP_MN_SURPRISE_REMOVAL . |
|
La regla PowerDownAllocate especifica que un controlador FDO y FIDO no deben asignar memoria al procesar una solicitud de IRP_MN_SET_POWER para una transición SystemPowerState que va de s0 a [S1... S5]. |
|
La regla PowerDownFail especifica que un controlador FDO o FIDO no debe producir un error en una solicitud de IRP_MN_SET_POWER cuando el dispositivo se apaga. Esta regla solo se aplica a los controladores FDO y FIDO. |
|
La regla PowerIrpDDIs especifica que cuando un controlador está procesando un sistema o un dispositivo IRP_MJ_POWER con IRP_MN_SET_POWER, no debe llamar a DDIs que solo se pueda llamar en PASSIVE_LEVEL. |
|
La regla PowerUpFail especifica que un controlador FDO o FIDO no debe producir un error en una solicitud de IRP_MN_SET_POWER cuando el dispositivo está encendido. |
|
La regla PnpIrpCompletion comprueba que un controlador de FDO pasa IRP PnP al controlador inferior. |
|
La regla WmiComplete especifica que al procesar un IRP secundario de WMI, el controlador llama a IoCompleteRequest antes de volver de la rutina DispatchSystemControl . |
|
La regla WmiForward especifica que el controlador debe reenviar irP menores de WMI cuando se requiera el reenvío. |
Para seleccionar el conjunto de reglas IrpProcessing
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 IrpProcessing.
Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema para desarrolladores de Visual Studio, especifique IrpProcessing.sdv con la opción /check . Por ejemplo:
msbuild /t:sdv /p:Inputs="/check:IrpProcessing.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).