Partilhar via


Descarregar ambiente de rotina

O sistema operativo descarrega um driver quando o driver está a ser substituído ou quando todos os dispositivos que o driver serve foram removidos. O gestor PnP chama a rotina Unload de um driver PnP se o driver não tiver mais objetos de dispositivo após tratar um pedido IRP_MN_REMOVE_DEVICE.

No início da sequência de descarga, o gestor de E/S ou o gestor de PnP marca o objeto de driver e os seus objetos de dispositivo como "Descarregar pendente". Depois de um controlador ter sido marcado como "Descarregar pendente", nenhum controlador adicional pode ser ligado a esse controlador, nem podem ser feitas quaisquer referências adicionais aos objetos do dispositivo do controlador. O controlador pode completar os IRPs pendentes, mas o sistema não enviará novos IRPs ao controlador.

O gerenciador de E/S chama a rotina Unload de um driver quando todas as seguintes opções forem verdadeiras:

  • Nenhuma referência permanece para qualquer um dos objetos de dispositivo que o driver criou. Em outras palavras, nenhum ficheiro associado ao dispositivo subjacente pode estar aberto, nem podem existir IRPs pendentes para qualquer um dos objetos de dispositivo do controlador.

  • Nenhum outro controlador permanece ligado a este controlador.

  • O driver chamou IoUnregisterPlugPlayNotification para desregistar todas as notificações PnP para as quais se registou anteriormente.

Observe que a rotina Unload não é chamada se a rotina DriverEntry de um driver retornar um status de falha. Neste caso, o gestor de E/S liberta simplesmente o espaço de memória ocupado pelo controlador.

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