Interrompendo um dispositivo para desabilitá-lo (Windows 98/Me)
No Windows 98/Me, o gerenciador de PnP emite a parada de IRPs quando Gerenciador de Dispositivos desabilita o dispositivo. (Windows 2000 e versões posteriores do problema do Windows removem IRPs nessa situação).
O gerenciador PnP envia os IRPs de parada na seguinte sequência:
O gerenciador PnP emite uma IRP_MN_QUERY_STOP_DEVICE para perguntar se os drivers de um dispositivo podem parar o dispositivo.
Se todos os drivers na pilha de dispositivos retornarem STATUS_SUCCESS, os drivers colocaram o dispositivo em um estado (stop-pending) do qual o dispositivo pode ser interrompido rapidamente.
O gerenciador PnP consulta quantas pilhas de dispositivo forem necessárias para desabilitar o dispositivo.
Se o IRP_MN_QUERY_STOP_DEVICE for bem-sucedido, o gerenciador de PnP emitirá uma IRP_MN_STOP_DEVICE para interromper o dispositivo.
O gerenciador PnP envia o IRP de parada somente se o IRP de parada de consulta anterior para o dispositivo for concluído com êxito. Em resposta à parada do IRP, os drivers liberam os recursos de hardware do dispositivo (como suas portas de E/S) e falham em todos os IRPs que exigem acesso ao dispositivo.
Se o IRP_MN_QUERY_STOP_DEVICE falhar, o gerenciador PnP enviará uma IRP_MN_CANCEL_STOP_DEVICE para cancelar a consulta.
Em resposta a um IRP_MN_CANCEL_STOP_DEVICE, os drivers de um dispositivo retornam o dispositivo para o estado iniciado e retomam o processamento de solicitações de E/S para o dispositivo.
O gerenciador PnP cancelará a parada de consulta de uma pilha de dispositivos se um driver na pilha falhar na solicitação. Quando o gerenciador PnP cancela a parada de consulta em apenas uma pilha de dispositivos, ele envia a solicitação de IRP_MN_CANCEL_STOP_DEVICE porque todos os drivers anexados acima do driver que falharam na consulta têm o dispositivo no estado de parada pendente. Quando o IRP_MN_CANCEL_STOP_DEVICE for bem-sucedido, os drivers retornaram o dispositivo para o estado iniciado.
Quando um dispositivo está sendo desabilitado, seus drivers não podem enfileirar IRPs de entrada porque não há garantia de quando o dispositivo pode ser reabilitado. Consequentemente, os dados podem ser perdidos.