Стандартные USB-идентификаторы
Набор идентификаторов, созданных для USB-устройств, зависит от того, является ли устройство одним интерфейсом или устройством с несколькими интерфейсами.
USB-устройства с одним интерфейсом
При подключении нового USB-устройства драйвер USB-концентратора создает следующий идентификатор устройства, используя сведения, извлеченные из дескриптора устройства устройства:
USB\VID_v(4)&PID_d(4)&REV_r(4)
Где:
- v(4) — это код поставщика, который USB-комитет назначает поставщику.
- d(4) — это код продукта, который поставщик назначает устройству.
- R(4) — это код редакции.
Драйвер концентратора извлекает коды поставщиков и продуктов из полей idVendor, idProduct и bcdDevice дескриптора устройства соответственно. Эти коды представляют собой шестнадцатеричные числа с четырьмя цифрами.
Раздел модели INF также может указать следующий идентификатор оборудования:
USB\VID_v(4)&PID_d(4)
И следующие совместимые идентификаторы:
USB\CLASS_c(2)&SUBCLASS_s(2)&PROT_p(2)
USB\CLASS_c(2)&SUBCLASS_s(2)
USB\CLASS_c(2)
Где:
- c(2) — это код класса устройства, взятый из дескриптора устройства.
- S(2) — это код подкласса устройства.
- p(2) — это код протокола.
Поля bDeviceClass, bDeviceSubClass и bDeviceProtocol дескриптора устройства определяют код класса устройства, код подкласса и код протокола соответственно. Эти коды являются двузначными шестнадцатеричными числами.
USB-устройства с несколькими интерфейсами
Устройства с несколькими интерфейсами называются составными устройствами. При подключении нового составного USB-устройства к компьютеру Windows драйвер USB-концентратора создает объект физического устройства (PDO) и уведомляет операционную систему об обновлении списка дочерних устройств. После того как Windows запрашивает драйвер концентратора для идентификаторов оборудования, связанных с новым PDO, он выполняет поиск соответствующих INF-файлов, чтобы найти соответствие идентификаторов. Если он находит совпадение, отличное от USB\COMPOSITE, он загружает драйвер, указанный в INF-файле. Однако если другое совпадение не найдено, операционная система использует совместимый идентификатор USB\COMPOSITE, для которого загружается универсальный родительский драйвер USB. Затем универсальный родительский драйвер создает отдельный PDO и создает отдельный набор идентификаторов оборудования для каждого интерфейса составного устройства.
Каждый интерфейс имеет идентификатор устройства следующей формы:
USB\VID_v(4)&PID_d(4)&MI_z(2)
Где:
- v(4) — это код поставщика, который USB-комитет назначает поставщику.
- d(4) — это код продукта, который поставщик назначает устройству.
- z(2) — это номер интерфейса, извлеченный из поля bInterfaceNumber соответствующего дескриптора интерфейса.
Раздел модели INF также может указать следующие совместимые идентификаторы:
USB\CLASS_d(2)&SUBCLASS_s(2)&PROT_p(2)
USB\CLASS_d(2)&SUBCLASS_s(2)
USB\CLASS_d(2)
USB\COMPOSITE
Где:
- d(2) — это код класса устройства, взятый из дескриптора устройства.
- S(2) — это код подкласса.
- p(2) — это код протокола.
Поля bInterfaceClass, bInterfaceSubClass и bInterfaceProtocol дескриптора интерфейса определяют код класса устройства, код подкласса и код протокола соответственно. Эти коды являются двузначными шестнадцатеричными числами.