Función IoRequestDeviceEject (wdm.h)
La rutina IoRequestDeviceEject notifica al administrador de PnP que se presionó 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
None
Observaciones
Tenga en cuenta que esta rutina informa de una solicitud de expulsión de dispositivos, no de medios.
Normalmente, un controlador de autobús PnP llama a IoRequestDeviceEject para notificar al administrador de PnP que un usuario presionó 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 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 ejecció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 modo kernel registrados 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 la consulta, 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 son correctos, 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 omita 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 la funcionalidad EjectSupported está establecida 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 de IRP_MN_EJECT al controlador de bus para el dispositivo. Cualquier función y filtrado de controladores desasociados anteriormente de la pila en respuesta al IRP de eliminación, 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.
-
No se admite la expulsión activa.
En este caso, el dispositivo es 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 | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 2000. |
Plataforma de destino | Universal |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (consulte la sección Comentarios) |