Regla MarkingQueuedIrps (wdm)
La regla MarkingQueuedIrps especifica que el controlador llama a IoMarkIrpPending para un IRP que solo requiere un procesamiento adicional mientras mantiene un bloqueo de número. Esta regla solo se aplica cuando el controlador agrega el IRP a una cola administrada por controladores.
En concreto, el controlador infringe esta regla solo cuando se producen todos los eventos siguientes.
El controlador llama a KeAcquireSpinLock o KeAcquireInStackQueuedSpinLock para adquirir un bloqueo de número.
El controlador llama a una de las siguientes rutinas para agregar un IRP a una cola administrada por controladores:
El controlador llama a KeReleaseSpinLock o KeReleaseInStackQueuedSpinLock para liberar el bloqueo de número antes de llamar a IoMarkIrpPending.
El controlador devuelve un estado de STATUS_PENDING para irP.
Los controladores deben llamar a IoMarkIrpPending solo para un IRP en cola mientras mantiene un bloqueo de número. De lo contrario, se podría quitar de la cola un IRP, completarse con otra rutina de controlador y liberarse por el sistema antes de que se produzca la llamada a IoMarkIrpPending , lo que provoca un bloqueo.
Para obtener más información, consulte Sincronización de la cancelación de IRP.
Modelo de controlador: WDM
Cómo probar
En tiempo de compilación |
---|
Ejecute el Comprobador de controladores estáticos y especifique la regla MarkingQueuedIrps . Usa los pasos siguientes para ejecutar un análisis de tu código:
Para obtener más información, consulte Uso del comprobador de controladores estáticos para buscar defectos en controladores. |
Se aplica a
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueue KeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList