Compartilhar via


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:

  1. 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.

  2. 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.

  3. 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.