Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El sistema operativo descarga un controlador cuando dicho controlador es reemplazado o cuando se han eliminado todos los dispositivos que el controlador gestiona. El gestor de PnP llama a una rutina Unload de un controlador PnP cuando el controlador no tiene más objetos de dispositivo después de procesar una solicitud IRP_MN_REMOVE_DEVICE.
Al inicio de la secuencia de descarga, el administrador de E/S o el administrador de PnP marcará el objeto controlador y sus objetos de dispositivo como "Descarga pendiente". Después de que un controlador se haya marcado como "Descarga pendiente", no se puede conectar ningún controlador adicional a ese controlador, ni se pueden hacer referencias adicionales a los objetos de dispositivo del controlador. El controlador puede completar IRP pendientes, pero el sistema no enviará ningún IRP nuevo al controlador.
El administrador de E/S llama a la rutina Unload de un controlador cuando se cumplen todas las siguientes condiciones:
No quedan referencias a ninguno de los objetos de dispositivo que el controlador ha creado. En otras palabras, no se puede abrir ningún archivo asociado con el dispositivo subyacente, ni ningún IRP puede estar pendiente para cualquiera de los objetos de dispositivo del controlador.
Ningún otro controlador sigue asociado a este controlador.
El controlador ha llamado a IoUnregisterPlugPlayNotification para desregistrar todas las notificaciones PnP para las que se había registrado anteriormente.
Tenga en cuenta que no se llama a la rutina Unload si la rutina DriverEntry de un controlador devuelve un estado de error. En este caso, el administrador de E/S simplemente libera el espacio de memoria que toma el controlador.
Ni el administrador de PnP ni el administrador de E/S llaman a rutinas de descarga en tiempo de apagado del sistema. Un controlador que debe realizar el procesamiento de apagado debe registrar una rutina DispatchShutdown .