Compartilhar via


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 .