Regra MarkingQueuedIrps (wdm)
A regra MarkingQueuedIrps especifica que o driver chama IoMarkIrpPending para um IRP que requer processamento adicional apenas enquanto mantém um bloqueio de rotação. Essa regra se aplica somente quando o driver adiciona o IRP a uma fila gerenciada pelo driver.
Especificamente, o driver viola essa regra somente quando todos os eventos a seguir ocorrem.
O driver chama KeAcquireSpinLock ou KeAcquireInStackQueuedSpinLock para adquirir um bloqueio de rotação.
O driver chama uma das seguintes rotinas para adicionar um IRP a uma fila gerenciada por driver:
O driver chama KeReleaseSpinLock ou KeReleaseInStackQueuedSpinLock para liberar o bloqueio de rotação antes de chamar IoMarkIrpPending.
O driver retorna uma status de STATUS_PENDING para o IRP.
Os drivers devem chamar IoMarkIrpPending para um IRP enfileirado apenas enquanto mantém um bloqueio de rotação. Caso contrário, um IRP poderia ser desempacoizado, concluído por outra rotina de driver e liberado pelo sistema antes que a chamada para IoMarkIrpPending ocorresse, causando assim uma falha.
Para obter mais informações, consulte Sincronizando o cancelamento de IRP.
Modelo de driver: WDM
Como testar
Em tempo de compilação |
---|
Execute o Verificador de Driver Estático e especifique a regra MarkingQueuedIrps . Use as seguintes etapas para executar uma análise do código:
Para obter mais informações, consulte Usando o verificador de driver estático para localizar defeitos em drivers. |
Aplica-se a
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList