Идентификатор оборудования
Идентификатор оборудования — это определяемая поставщиком строка идентификации, которую Windows использует для сопоставления устройства с пакетом драйвера . Идентификатор оборудования идентифицирует устройство и указывает, что любой пакет драйвера, объявляющий его, может работать с устройством с таким идентификатором для определенной степени функциональности. В большинстве случаев устройство имеет несколько аппаратных идентификаторов, связанных с ним. Как правило, список аппаратных идентификаторов сортируется от большинства до наименее подходящих для устройства. Например, список концептуальных идентификаторов оборудования для устройства может выглядеть следующим образом:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Где фактические идентификаторы оборудования представляют эти понятия с помощью строк, которые соответствуют требованиям к формату идентификатора оборудования.
Создание идентификатора оборудования для устройства
Идентификаторы оборудования передаются в диспетчер подключаемых устройств (PnP) перечисли телем
<enumerator>\<enumerator-specific-device-ID>
Этот формат является наиболее распространенным для отдельных устройств PnP, сообщаемых диспетчеру Plug and Play (PnP) одним перечислителем.
\*<generic-device-ID>
Звездочка указывает, что несколько перечислителя поддерживают устройство, например ISAPNP и BIOS.
<device-class-specific-ID>
Дополнительные сведения см. в универсальные идентификаторы.
Существующий класс устройства с собственным установленным соглашением об именовании может использовать пользовательский формат. Сведения о форматах идентификаторов оборудования см. в спецификации оборудования для таких автобусов.
Число символов аппаратного идентификатора, за исключением конца NULL, должно быть меньше MAX_DEVICE_ID_LEN
. Это ограничение применяется к сумме длины всех полей и всех разделителей полей \\
в идентификаторе оборудования. Для получения дополнительных сведений см. раздел Operations в IRP_MN_QUERY_ID.
Идентификаторы оборудования для корневых перечисляемых устройств
Корневые перечислимые устройства являются особыми в том, что они могут быть созданы с помощью API, где можно предоставить идентификатор оборудования. Корневые устройства, перечисленные с аппаратными идентификаторами общих пространств имен, например ROOT\SYSTEM
, могут конфликтовать и привести к появлению значка ошибки с восклицательным знаком в Диспетчере устройств при обновлении Windows.
Эту ошибку можно предотвратить с помощью уникального пространства имен для каждого драйвера, имеющего корневое перечисленное устройство. Для USB или системного устройства вместо ROOT\USB
или ROOT\SYSTEM"
используйте ROOT\[COMPANYNAME]\[DEVICENAME]
. Перед установкой проверьте наличие devnode.
Получение списка идентификаторов оборудования для устройства
Чтобы найти список идентификаторов оборудования для данного устройства, выполните следующие действия.
- Откройте диспетчер устройств.
- Найдите устройство в дереве.
- Щелкните правой кнопкой мыши устройство и выберите Свойства.
- Перейдите на вкладку подробности.
- В раскрывающемся списке свойств выберите идентификаторы оборудования или идентификаторы совместимости.
Список аппаратных идентификаторов также можно получить программным путем получения свойства DEVPKEY_Device_HardwareIds на устройстве. Например, это свойство можно получить с помощью API,таких как IoGetDevicePropertyData, SetupDiGetDevicePropertyили CM_Get_DevNode_Property.
Список идентификаторов оборудования, извлекаемых этой подпрограммой, является значением REG_MULTI_SZ. Максимальное число символов в списке оборудования, включая добавление символа NULL после каждого идентификатора оборудования и окончательного символа NULL, составляет REGSTR_VAL_MAX_HCID_LEN
. Максимально возможное количество идентификаторов в списке аппаратных идентификаторов — 64.
Примеры идентификаторов оборудования
Ниже приведен пример универсального идентификатора для устройства PnP:
root\*PNP0F08
Ниже приведен пример идентификатора дляустройства PCI:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02