Стандартные идентификаторы USB
Набор идентификаторов, создаваемых для USB-устройств, зависит от того, является ли устройство устройством с одним интерфейсом или устройством с несколькими интерфейсами.
Single-Interface USB-устройства
При подключении нового USB-устройства драйвер USB-концентратора, предоставляемый системой, создает следующий идентификатор устройства с помощью сведений, извлеченных из дескриптора устройства:
USB\VID_v(4)&PID_d(4)&REV_r(4)
Где:
v(4) — это код поставщика, который комитет ПО USB назначает поставщику.
d(4) — это код продукта, который поставщик назначает устройству.
r(4) — это код редакции.
Драйвер концентратора извлекает коды поставщика и продукта из полей idVendor, idProduct и bcdDeviceдескриптора устройства соответственно. Это 4-значные шестнадцатеричные числа.
В разделе 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дескриптора устройства соответственно. Это 2-значные шестнадцатеричные числа.
Multiple-Interface USB-устройства
Устройства с несколькими интерфейсами называются составными устройствами. Начиная с Windows 2000 при подключении нового составного USB-устройства к компьютеру драйвер концентратора USB создает объект физического устройства (PDO) и уведомляет операционную систему об изменении набора дочерних устройств. После запроса у драйвера концентратора идентификаторов оборудования, связанных с новым PDO, операционная система выполняет поиск соответствующих INF-файлов, чтобы найти совпадение идентификаторов. Если обнаруживается совпадение, отличное от USB\COMPOSITE, загружается драйвер, указанный в INF-файле. Однако если другое совпадение не найдено, операционная система использует совместимый идентификатор USB\COMPOSITE, для которого загружается драйвер УНИВЕРСАЛЬНОго родителя USB. Затем драйвер Generic Parent создает отдельное 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дескриптора интерфейса соответственно. Это 2-значные шестнадцатеричные числа.