Descarregar ambiente de rotina
O sistema operacional descarrega um driver quando o driver está sendo substituído ou quando todos os dispositivos que os serviços de driver foram removidos. O gerenciador PnP chamará a rotina Unload de um driver PnP se o driver não tiver mais objetos de dispositivo depois de manipular uma solicitação de IRP_MN_REMOVE_DEVICE .
No início da sequência de descarregamento, o gerenciador de E/S ou o gerenciador de PnP marca o objeto do driver e seus objetos de dispositivo como "Descarregar Pendente". Depois que um driver tiver sido marcado como "Descarregar Pendente", nenhum driver adicional poderá ser anexado a esse driver, nem quaisquer referências adicionais serão feitas aos objetos de dispositivo do driver. O driver pode concluir IRPs pendentes, mas o sistema não enviará nenhum novo IRPs para o driver.
O gerente de E/S chama a rotina unload de um driver quando todos os seguintes itens são verdadeiros:
Nenhuma referência permanece para nenhum dos objetos de dispositivo que o driver criou. Em outras palavras, nenhum arquivo associado ao dispositivo subjacente pode ser aberto, nem os IRPs podem ser pendentes para qualquer um dos objetos de dispositivo do driver.
Nenhum outro motorista permanece ligado a este driver.
O driver chamou IoUnregisterPlugPlayNotification para cancelar o registro de todas as notificações PnP para as quais ele se registrou anteriormente.
Observe que a rotina Unload não será chamada se a rotina DriverEntry de um driver retornar uma falha status. Nesse caso, o gerenciador de E/S simplesmente libera o espaço de memória ocupado pelo driver.
Nem o gerenciador de PnP nem o gerente de E/S chamam rotinas de descarregamento no momento do desligamento do sistema. Um driver que deve executar o processamento de desligamento deve registrar uma rotina DispatchShutdown .