Función IoRequestDeviceEject (wdm.h)
El IoRequestDeviceEject rutina notifica al administrador de PnP que se ha presionado el botón de expulsión del dispositivo.
Sintaxis
void IoRequestDeviceEject(
[in] PDEVICE_OBJECT PhysicalDeviceObject
);
Parámetros
[in] PhysicalDeviceObject
Puntero al PDO del dispositivo.
Valor devuelto
Ninguno
Observaciones
Tenga en cuenta que esta rutina informa de una solicitud de expulsión del dispositivo, no de medios.
Normalmente, un controlador de bus PnP llama a ioRequestDeviceEject para notificar al administrador de PnP que un usuario ha presionado el botón de expulsión del dispositivo en uno de sus dispositivos secundarios.
Un controlador llama a esta rutina, en lugar de enviar una solicitud de IRP_MN_EJECT, ya que esta rutina permite al administrador de PnP coordinar acciones adicionales para el expulsión además de enviar el IRP. Por ejemplo, el administrador de PnP notifica a los componentes en modo de usuario y en modo kernel que se registraron para la notificación de cambios en el dispositivo.
El administrador de PnP dirige un apagado ordenado del dispositivo. El administrador de PnP:
-
Crea una lista de otros dispositivos afectados por este dispositivo que se va a expulsar.
El administrador de PnP consulta las relaciones de eliminación del dispositivo, las relaciones de expulsión y las relaciones de bus (dispositivos secundarios).
-
Determina si el dispositivo y sus dispositivos relacionados se pueden quitar de software.
El administrador de PnP envía IRP_MN_QUERY_REMOVE_DEVICE IRP a los controladores del dispositivo y sus dispositivos relacionados. El administrador de PnP también envía notificaciones a los componentes en modo de usuario y en modo kernel que se registraron para la notificación de cambio de dispositivo en el dispositivo o en cualquiera de sus dispositivos relacionados. Si alguno de los controladores o componentes en modo de usuario produce un error en la eliminación de consultas, el administrador de PnP abre un cuadro de diálogo para notificar al usuario que se produjo un error en la expulsión.
-
El software quita el dispositivo y sus dispositivos relacionados.
Si los pasos anteriores se realizan correctamente, el administrador de PnP notifica a los controladores y aplicaciones registrados que el dispositivo y sus dispositivos relacionados se están quitando de software. A continuación, el administrador de PnP envía IRP_MN_REMOVE_DEVICE IRP a los controladores del dispositivo y sus dispositivos relacionados. Los controladores de función y filtrado se desasocian de la pila de dispositivos y eliminan sus objetos de dispositivo para los dispositivos. Los controladores de autobús conservan los PDO para los dispositivos, a menos que un dispositivo se haya ido físicamente y el controlador de autobús omitió el dispositivo en su respuesta más reciente a IRP_MN_QUERY_DEVICE_RELATIONS/BusRelations para el bus primario del dispositivo.
-
Dirige al controlador de autobús para expulsar el dispositivo (si es posible).
El administrador de PnP realiza diferentes pasos, en función de las funcionalidades de expulsión del dispositivo:
-
Se admite la expulsión activa.
Si se establece la funcionalidad EjectSupported para el dispositivo, el dispositivo se puede expulsar cuando se ejecuta el sistema (está en estado PowerSystemWorking). El administrador de PnP envía una solicitud IRP_MN_EJECT al controlador de bus para el dispositivo. Cualquier función y filtrado de controladores desasociados anteriormente de la pila en respuesta a la eliminación del IRP, por lo que el controlador de bus controla el IRP de expulsión. Cuando el controlador de autobús completa el IRP, el administrador de PnP espera que el dispositivo esté físicamente ausente del sistema.
-
La expulsión activa no se admite.
En este caso, el dispositivo se extraíble, pero no admite la expulsión. El administrador de PnP marca el dispositivo como no presente o no funciona correctamente. El administrador de PnP no reiniciará el dispositivo hasta que un usuario lo quite físicamente y vuelva a insertarlo. En este caso, el administrador de PnP no envía un IRP_MN_EJECT.
-
Se admite la expulsión activa.
Una aplicación en modo de usuario puede iniciar una expulsión de dispositivo. En ese caso, ningún controlador llama a esta rutina, pero el sistema operativo llama al administrador de PnP para iniciar los pasos enumerados anteriormente.
Los autores de llamadas de ioRequestDeviceEject deben ejecutarse en IRQL <= DISPATCH_LEVEL. El administrador de PnP realiza la mayoría de sus tareas de expulsión de dispositivos enumeradas anteriormente en IRQL = PASSIVE_LEVEL.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible a partir de Windows 2000. |
de la plataforma de destino de | Universal |
encabezado de | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca de | NtosKrnl.lib |
DLL de | NtosKrnl.exe |
irQL | <= DISPATCH_LEVEL (consulte la sección Comentarios) |