Sequência de Surprise-Removal
Se o usuário remover o dispositivo sem aviso, simplesmente desconectando-o sem usar Gerenciador de Dispositivos ou o utilitário Remover Hardware com segurança, o dispositivo será considerado "removido de surpresa". Quando isso ocorre, a estrutura segue uma sequência de remoção ligeiramente diferente. Ele também segue a sequência de remoção surpresa se outro driver chamar IoInvalidateDeviceState no dispositivo, mesmo que o dispositivo ainda esteja fisicamente presente. Na sequência de remoção surpresa, a estrutura chama o retorno de chamada EvtDeviceSurpriseRemoval antes de chamar qualquer um dos outros retornos de chamada na sequência de remoção. Quando a sequência é concluída, a estrutura destrói o objeto do dispositivo. Os drivers para todos os dispositivos removíveis devem garantir que os retornos de chamada nos caminhos de desligamento e inicialização possam lidar com falhas, especialmente falhas causadas pela remoção do hardware. Todas as tentativas de acessar o hardware não devem esperar indefinidamente, mas devem estar sujeitas a tempos limite ou a um temporizador de watchdog.
O diagrama a seguir mostra os retornos de chamada envolvidos em uma remoção surpresa:
Se o dispositivo não estava no estado de trabalho quando foi removido, a estrutura chama o retorno de chamada de evento EvtDeviceReleaseHardware imediatamente após EvtDeviceSurpriseRemoval. Ele omite as etapas intermediárias, que já foram executadas quando o dispositivo saiu do estado de trabalho.