Compartir a través de


Control de un evento de GUID_TARGET_DEVICE_QUERY_REMOVE

Antes de que el administrador de PnP envíe una IRP_MN_QUERY_REMOVE_DEVICE IRP a los controladores de un dispositivo, llama a las rutinas de devolución de llamada de notificación registradas para EventCategoryTargetDeviceChange en el dispositivo. El administrador de PnP especifica notificationStructure. Evento de GUID_TARGET_DEVICE_QUERY_REMOVE.

En respuesta a esta notificación, la rutina de devolución de llamada determina si el dispositivo se puede quitar sin interrumpir el sistema.

Si no se debe quitar el dispositivo, la rutina de devolución de llamada devuelve STATUS_UNSUCCESSFUL. En respuesta a este estado, el administrador de PnP anula el procesamiento de la eliminación de consultas y el dispositivo no se quitará.

Si se puede quitar el dispositivo, la rutina de devolución de llamada debe realizar las operaciones adecuadas para preparar la eliminación del dispositivo, como cerrar los identificadores abiertos en el dispositivo (si es posible). Si los identificadores permanecen abiertos en el dispositivo, el administrador de PnP no puede quitar el dispositivo y el administrador de PnP anula el procesamiento de la eliminación de consultas.

Al controlar correctamente un evento de GUID_TARGET_DEVICE_QUERY_REMOVE, una rutina de devolución de llamada de notificación debe:

  • Cierre los identificadores abiertos en el dispositivo.

  • Si el controlador tiene una referencia pendiente en el objeto de archivo, desreferencia el objeto de archivo.

  • Permanezca registrado para futuras notificaciones EventCategoryTargetDeviceChange . Esto es importante porque es posible que se cancele la operación de eliminación inminente.

Cerrar un identificador en un dispositivo no cancela el registro de un controlador para la notificación de cambio de dispositivo de destino PnP. El administrador de PnP todavía puede llamar a la rutina de devolución de llamada de notificación del controlador, pero en tales llamadas el objeto de archivo de NotificationStructure no es válido.