Trabajar con dispositivos USB en controladores UMDF 1.x
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 representa cada dispositivo USB como un objeto de dispositivo USB de marco. Un controlador UMDF debe crear un objeto de dispositivo USB de marco para que el controlador pueda acceder a la compatibilidad del marco con destinos de E/S USB. UMDF proporciona métodos de objeto de dispositivo USB que permiten que un controlador UMDF:
Creación de un objeto de dispositivo UMDF-USB
Para usar las funcionalidades de destino de E/S USB del marco, un controlador UMDF primero debe obtener un puntero a la interfaz IWDFUsbTargetFactory . Para obtener el puntero, el controlador debe llamar al método QueryInterface de la interfaz IWDFDevice del dispositivo. En el ejemplo de código siguiente se muestra cómo llamar a QueryInterface para obtener el puntero:
hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);
El controlador debe llamar al método IWDFUsbTargetFactory::CreateUsbTargetDevice para crear un objeto de destino de E/S USB para el dispositivo. Una vez que el controlador crea el destino de E/S USB, el controlador puede enviar solicitudes al destino de E/S. Normalmente, los controladores llaman a IWDFUsbTargetFactory::CreateUsbTargetDevice desde una función de devolución de llamada IPnpCallbackHardware::OnPrepareHardware .
Después de que el controlador llame a IWDFUsbTargetFactory::CreateUsbTargetDevice, el controlador puede obtener información del dispositivo USB (por ejemplo, descriptores USB para el dispositivo, interfaces USB y puntos de conexión de interfaz). Los descriptores USB se describen en la especificación USB.
Obtención de información del dispositivo UMDF-USB
Después de que un controlador UMDF llame al método IWDFUsbTargetFactory::CreateUsbTargetDevice para crear un objeto de dispositivo de destino UMDF-USB, el controlador puede llamar a los métodos siguientes que el objeto de dispositivo de destino USB define para obtener información sobre un dispositivo USB:
IWDFUsbTargetDevice::RetrieveDescriptor
Obtiene el descriptor de dispositivo USB de un dispositivo.
IWDFUsbTargetDevice::GetNumInterfaces
Obtiene el número de interfaces USB que admite el dispositivo.
IWDFUsbTargetDevice::RetrieveUsbInterface
Obtiene un puntero a una interfaz IWDFUsbInterface que expone una de las interfaces USB que admite el dispositivo.
IWDFUsbTargetDevice::RetrieveDeviceInformation
Recupera información de funcionalidad asociada a un dispositivo USB.
IWDFUsbTargetDevice::RetrievePowerPolicy
Recupera una directiva de energía de WinUsb.
IWDFUsbTargetDevice::GetWinUsbHandle
Obtiene el identificador de interfaz de WinUsb asociado al objeto de dispositivo de destino de E/S.
Envío de una transferencia de control a un objeto de dispositivo UMDF-USB
Un controlador UMDF puede llamar al método IWDFUsbTargetDevice::FormatRequestForControlTransfer para dar formato a una solicitud de E/S que describa una transferencia de control USB estándar, específica de la clase de dispositivo o específica del proveedor. A continuación, el controlador puede llamar al método IWDFIoRequest::Send para enviar la solicitud de forma sincrónica o asincrónica.
Configuración de la directiva de energía para un dispositivo UMDF-USB
Un controlador UMDF puede llamar al método IWDFUsbTargetDevice::SetPowerPolicy para establecer la directiva de energía que usa WinUsb para un dispositivo USB. La directiva de alimentación de un dispositivo USB afecta a los estados de administración de energía del dispositivo.