Rutina de descarga del controlador PnP
Un controlador PnP debe tener una rutina Unload que quite los recursos específicos del controlador, como memoria, subprocesos y eventos, creados por la rutina DriverEntry . Si no hay recursos específicos del controlador que se van a quitar, el controlador debe seguir teniendo una rutina Unload , pero simplemente puede devolver.
Se puede llamar a la rutina Unload de un controlador en cualquier momento después de que se hayan quitado todos los dispositivos del controlador. El administrador de PnP llama a la rutina Unload de un controlador en el contexto de un subproceso del sistema en IRQL = PASSIVE_LEVEL.
Los controladores PnP liberan recursos específicos del dispositivo y objetos de dispositivo en respuesta a los IRP de eliminación de dispositivos PnP. El administrador de PnP envía estos IRP en nombre de cada dispositivo PnP que enumera, así como los dispositivos heredados enumerados por la raíz, un controlador notifica mediante IoReportDetectedDevice.
Por lo tanto, las rutinas Unload de los controladores PnP suelen ser sencillas, a menudo consiste únicamente en una instrucción return . Sin embargo, si el controlador asignó recursos de todo el controlador en su rutina DriverEntry , debe desasignar esos recursos en su rutina De descarga a menos que ya lo haya hecho. En general, el proceso de descarga de un controlador PnP es una operación sincrónica.
El administrador de E/S libera el objeto de controlador y cualquier extensión de objeto de controlador que el controlador haya asignado mediante IoAllocateDriverObjectExtension.