Compartir a través de


Trabajar con interfaces 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 actualización de ejemplos de controladores de Windows 11, versión 22H2 - mayo de 2022.

Para obtener más información, consulta Introducción con UMDF.

El marco representa cada interfaz USB como un objeto de interfaz USB de marco. Cuando un controlador UMDF crea un objeto de dispositivo USB de marco, el marco crea un objeto de interfaz USB de marco para cada interfaz USB que admita el dispositivo.

La mayoría de los dispositivos USB solo tienen una interfaz y la interfaz solo tiene una configuración alternativa. Normalmente, los controladores de estos dispositivos no necesitan usar los métodos de objeto que define el objeto de interfaz USB del marco.

Si un controlador UMDF admite dispositivos USB que proporcionan varias interfaces o configuraciones alternativas, los métodos de objeto de interfaz permiten al controlador:

Obtención de información de la interfaz UMDF-USB

Después de que un controlador UMDF haya llamado al método IWDFUsbTargetFactory::CreateUsbTargetDevice para crear un objeto de dispositivo de destino UMDF-USB, el controlador puede llamar al método IWDFUsbTargetDevice::GetNumInterfaces para obtener el número de interfaces USB que admite el dispositivo. A continuación, el controlador puede realizar llamadas al método IWDFUsbTargetDevice::RetrieveUsbInterface para obtener punteros a las interfaces IWDFUsbInterface que exponen las interfaces USB que admite el dispositivo. A continuación, el controlador puede llamar a los métodos siguientes que define cada objeto de interfaz USB para obtener información sobre la interfaz USB:

IWDFUsbInterface::GetInterfaceNumber
Obtiene el número de interfaz USB asociado a un objeto de interfaz USB.

IWDFUsbInterface::GetInterfaceDescriptor
Obtiene ese descriptor de interfaz USB asociado a una de las opciones alternativas de una interfaz USB.

IWDFUsbInterface::GetNumEndPoints
Obtiene el número de puntos de conexión (también conocidos como canalizaciones) que están asociados a una de las opciones alternativas de una interfaz USB.

IWDFUsbInterface::GetConfiguredSettingIndex
Obtiene un valor de índice que identifica la configuración alternativa seleccionada actualmente para una interfaz USB.

IWDFUsbInterface::RetrieveUsbPipeObject
Recupera un puntero a la interfaz IWDFUsbTargetPipe que expone el objeto de canalización de marco asociado a una interfaz de dispositivo USB y un índice de canalización especificados.

IWDFUsbInterface::GetWinUsbHandle
Obtiene el identificador de interfaz WinUsb asociado a una interfaz USB.

Selección de una configuración alternativa para una interfaz UMDF-USB

El controlador UMDF puede llamar al método IWDFUsbInterface::SelectSetting para seleccionar una configuración alternativa para una de las interfaces USB que admite el dispositivo.

La configuración alternativa del dispositivo debe estar numerada de forma contigua, empezando por cero.

Importante Al seleccionar una configuración, se invalida cualquier información sobre la interfaz y los puntos de conexión. Por lo tanto, el controlador debe obtener esta información de nuevo. El controlador también debe descartar los objetos de canalización USB que recuperó anteriormente y volver a crearlos.