Перечисление составных устройств USB
При подключении нового USB-устройства к хост-компьютеру драйвер USB-шины создает объект физического устройства (PDO) для устройства и создает событие PnP, чтобы сообщить о новом PDO. Затем операционная система запрашивает драйвер шины для аппаратных идентификаторов, связанных с PDO.
Для всех USB-устройств драйвер USB-шины сообщает идентификатор устройства со следующим форматом:
USB\VID_xxxx&PID_yyyy
Значения xxxx и yyyy выполняются непосредственно из полей idVendor и idProduct дескриптора устройства соответственно.
Драйвер шины также сообщает совместимый идентификатор (идентификатор), USB\COMPOSITE
если устройство соответствует следующим требованиям:
Поле класса устройства дескриптора устройства (bDeviceClass) должно содержать значение нуля или класс (bDeviceClass), подкласс (bDeviceSubClass) и поля дескриптора протокола (bDeviceProtocol) устройства должны иметь значения 0xEF, 0x02 и 0x01 соответственно, как описано в дескрипторе ассоциации USB.
Устройство должно иметь несколько интерфейсов.
Устройство должно иметь одну конфигурацию.
Драйвер шины также проверяет класс устройства (bDeviceClass), подкласс (bDeviceSubClass) и поля протокола (bDeviceProtocol) дескриптора устройства. Если эти поля равны нулю, устройство является составным устройством, а драйвер шины сообщает дополнительный совместимый идентификатор (id) USB\COMPOSITE для PDO.
После того, как драйвер шины получает аппаратные и совместимые идентификаторы для нового PDO, операционная система ищет INF-файлы. Если один из INF-файлов содержит совпадение с идентификатором устройства, Windows загружает этот драйвер и универсальный родительский драйвер не вступают в игру. Если INF-файл не содержит идентификатор устройства, а PDO имеет совместимый идентификатор, Windows выполняет поиск совместимого идентификатора. Этот поиск создает совпадение в USB.inf и приводит к загрузке usb-универсального родительского драйвера USB (Usbccgp.sys).
Если у устройства нет характеристик для создания совместимого идентификатора USB\COMPOSITE, необходимо указать INF-файл, который загружает универсальный родительский драйвер. INF-файл должен содержать раздел", который ссылается на Usb.inf.
Если составное устройство имеет несколько конфигураций, в inf-файле необходимо указать, какую конфигурацию должен использовать универсальный родительский элемент в реестре. Необходимые разделы реестра описаны в разделе "Настройка Usbccgp.sys для выбора конфигурации USB, отличной от по умолчанию".