Rotina de descarregamento do driver PnP
Um driver PnP deve ter uma rotina unload que remove todos os recursos específicos do driver, como memória, threads e eventos, que são criados pela rotina DriverEntry . Se não houver recursos específicos do driver a serem removidos, o driver ainda deverá ter uma rotina de descarregamento , mas ele poderá simplesmente retornar.
A rotina de descarregamento de um driver pode ser chamada a qualquer momento depois que todos os dispositivos do driver forem removidos. O gerenciador PnP chama a rotina de descarregamento de um driver no contexto de um thread do sistema em IRQL = PASSIVE_LEVEL.
Os drivers PnP liberam recursos específicos do dispositivo e objetos de dispositivo em resposta aos IRPs de remoção de dispositivo PnP. O gerenciador PnP envia esses IRPs em nome de cada dispositivo PnP enumerado, bem como quaisquer dispositivos herdados enumerados raiz que um driver relata usando IoReportDetectedDevice.
Consequentemente, as rotinas de descarregamento de drivers PnP geralmente são simples, geralmente consistindo apenas em uma instrução return . No entanto, se o driver alocou todos os recursos de todo o driver em sua rotina driverEntry , ele deve desalocar esses recursos em sua rotina de descarregamento , a menos que ele já tenha feito isso. Em geral, o processo de descarregamento de um driver PnP é uma operação síncrona.
O gerenciador de E/S libera o objeto driver e qualquer extensão de objeto de driver alocada pelo driver usando IoAllocateDriverObjectExtension.