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 o driver atende foram removidos. O gerenciador PnP chama a rotina Unload de um driver PnP se o driver não tiver mais objetos de dispositivo após lidar com uma solicitação 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 controlador e seus objetos de dispositivo como "Pendente de Descarregamento". Depois que um driver tiver sido marcado como "Descarregar Pendente", nenhum driver adicional poderá se anexar a esse driver, nem poderão ser feitas referências adicionais aos objetos do dispositivo do driver. O controlador pode concluir IRPs pendentes, mas o sistema não enviará novos IRPs para o controlador.

O gerenciador de E/S chama a rotina Unload de um driver quando todas as seguintes condições são verdadeiras:

  • Nenhuma referência permanece para nenhum dos objetos de dispositivo que o driver criou. Em outras palavras, nenhum arquivo associado ao dispositivo essencial pode ser aberto, nem devem existir IRPs pendentes para nenhum dos objetos de dispositivo do driver.

  • Nenhum outro controlador permanece anexado a este driver.

  • O driver chamou IoUnregisterPlugPlayNotification para desregistrar todas as notificações PnP para as quais ele registrou anteriormente.

Observe que a rotina de descarregamento não será chamada se a rotina DriverEntry de um driver retornar um status de falha. Nesse caso, o gerente de E/S simplesmente libera o espaço de memória gasto pelo driver.

Nem o gerente de PnP nem o gerente de E/S chamam rotinas Unload no momento do desligamento do sistema. Um driver que deve executar o processamento de desligamento deve registrar uma rotina DispatchShutdown .