Controlar el estado de un destino de E/S general en UMDF
Advertencia
UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2.
Los ejemplos de UMDF 1 archivados se pueden encontrar en la Windows 11, versión 22H2 : actualización de ejemplos de controladores de mayo de 2022.
Para obtener más información, consulta Introducción con UMDF.
El marco define los siguientes estados para los destinos generales de E/S:
Comenzó
El destino de E/S está abierto (es decir, disponible para el controlador UMDF) y el controlador puede enviar solicitudes de E/S a ella. El marco entrega las solicitudes al controlador adecuado.
Detenido
El destino de E/S está abierto, pero el controlador UMDF no puede enviar solicitudes de E/S al destino de E/S a menos que el controlador pase la marca WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE al parámetro Flags en una llamada al método IWDFIoRequest::Send .
El marco deja de entregar solicitudes al controlador adecuado.
Cerrado para Query-Remove
El destino de E/S se cierra temporalmente porque es posible que su dispositivo se quite pronto.
Cerrado
El destino de E/S está cerrado y no se puede iniciar ni detener.
Eliminado
Se ha quitado el dispositivo del destino de E/S.
La enumeración WDF_IO_TARGET_STATE define los valores que representan estos estados.
Estados de destino de E/S locales
El marco se abre automáticamente e inicia destinos de E/S locales.
Si es necesario, el controlador puede llamar a IWDFIoTargetStateManagement::Stop para detener temporalmente un destino de E/S local y llamar a IWDFIoTargetStateManagement::Start para reiniciarlo. Por ejemplo, el controlador podría detener un destino de E/S local si detecta una condición de error temporal y, a continuación, reiniciar el destino de E/S si se corrige la condición de error.
Si se quita un dispositivo de destino de E/S local, el marco se detiene y cierra automáticamente el destino de E/S y cancela todas las solicitudes de E/S que se encuentran en la cola del destino. El marco notifica al controlador que el dispositivo ya no está disponible mediante una llamada a funciones de devolución de llamada de eventos de objeto de dispositivo. Para obtener más información sobre estas funciones de devolución de llamada, consulte Escenarios de administración de energía y PnP en UMDF.
Los controladores pueden llamar a IWDFIoTargetStateManagement::GetState para obtener el estado actual de un destino de E/S local.
Estados de destino de E/S remotos
Los controladores deben llamar a IWDFRemoteTarget::OpenFileByName o IWDFRemoteTarget::OpenRemoteInterface para abrir destinos de E/S remotos. Cuando un controlador abre un destino de E/S remoto, el marco inicia automáticamente el destino de E/S.
Si es necesario, el controlador puede llamar a IWDFRemoteTarget::Stop para detener temporalmente un destino de E/S remoto y llamar a IWDFRemoteTarget::Start para reiniciarlo.
Si se quita un dispositivo de destino de E/S remoto, el marco se detiene y cierra automáticamente el destino de E/S y cancela todas las solicitudes de E/S que están en la cola del destino, a menos que el controlador registre las siguientes funciones de devolución de llamada de eventos:
IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
Informa al controlador de que se podría quitar un dispositivo de destino de E/S remoto. El controlador debe llamar a IWDFRemoteTarget::CloseForQueryRemove si desea que el controlador permita la eliminación del dispositivo.
IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
Informa al controlador de que se ha quitado un dispositivo de destino de E/S remoto. Esta función de devolución de llamada debe llamar a IWDFRemoteTarget::Close.
IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
Informa al controlador de que se ha cancelado un intento de quitar un dispositivo de destino de E/S remoto. Si desea que el controlador siga usando el destino, el controlador debe llamar a IWDFRemoteTarget::Reopen. Normalmente, un controlador llama a Reopen desde la función de devolución de llamada OnRemoteTargetRemoveCanceled , pero se puede llamar a Reopen en su lugar después de que OnRemoteTargetRemoveCanceled devuelva.
Los controladores pueden llamar a IWDFRemoteTarget::GetState para obtener el estado actual de un destino de E/S remoto.