Enumeración de dispositivos compuestos USB

Cuando un nuevo dispositivo USB está conectado a una máquina host, el controlador de bus USB crea un objeto de dispositivo físico (PDO) para el dispositivo y genera un evento PnP para notificar el nuevo PDO. A continuación, el sistema operativo consulta el controlador de bus para los identificadores de hardware asociados con el PDO.

Para todos los dispositivos USB, el controlador de bus USB notifica un identificador de dispositivo con el formato siguiente:

USB\VID_xxxx&PID_yyyy

Los valores xxxx e aaaa se toman directamente de los campos idVendor e idProduct del descriptor de dispositivo, respectivamente.

El controlador de bus también informa de un identificador compatible (ID) de USB\COMPOSITE, si el dispositivo cumple los siguientes requisitos:

  • El campo de clase de dispositivo del descriptor de dispositivo (bDeviceClass) debe contener un valor de cero o la clase (bDeviceClass), subclase (bDeviceSubClass) y los campos de protocolo (bDeviceProtocol) del descriptor de dispositivo deben tener los valores 0xEF, 0x02 y 0x01 respectivamente, como se explica en el Descriptor de asociación de interfaz USB.

  • El dispositivo debe tener varias interfaces.

  • El dispositivo debe tener una única configuración.

El controlador de bus también comprueba los campos de clase de dispositivo (bDeviceClass), subclase (bDeviceSubClass) y protocolo (bDeviceProtocol) del descriptor de dispositivo. Si estos campos son cero, el dispositivo es un dispositivo compuesto y el controlador de bus informa de un identificador (ID) adicional compatible de USB\COMPOSITE para el PDO.

Después de que el controlador de bus recupere el hardware y los identificadores compatibles para el nuevo PDO, el sistema operativo busca los archivos INF. Si uno de los archivos INF contiene una coincidencia para el identificador de dispositivo, Windows carga ese controlador y el controlador primario genérico no entran en juego. Si ningún archivo INF contiene el identificador de dispositivo y el PDO tiene un identificador compatible, Windows busca el identificador compatible. Esta búsqueda genera una coincidencia en Usb.inf y hace que el sistema operativo cargue el controlador primario genérico USB (Usbccgp.sys) .

Si el dispositivo no tiene las características para generar un identificador compatible de USB\COMPOSITE, debe proporcionar un archivo INF que cargue el controlador primario genérico. El archivo INF debe contener una sección needs/includes que haga referencia a Usb.inf.

Si el dispositivo compuesto tiene varias configuraciones, el archivo INF que proporcione debe especificar qué configuración debe usar el elemento primario genérico en el Registro. Las claves del Registro necesarias se describen en Configuración de Usbccgp.sys para seleccionar una configuración USB no predeterminada.