Поделиться через


Идентификатор оборудования

Идентификатор оборудования — это определяемая поставщиком строка идентификации, которую 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) перечисли телем устройства (водителя шины). Как правило, когда автор драйвера шины должен создать новый идентификатор оборудования для устройства, которое он сообщает в 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.

Получение списка идентификаторов оборудования для устройства

Чтобы найти список идентификаторов оборудования для данного устройства, выполните следующие действия.

  1. Откройте диспетчер устройств.
  2. Найдите устройство в дереве.
  3. Щелкните правой кнопкой мыши устройство и выберите Свойства.
  4. Перейдите на вкладку подробности.
  5. В раскрывающемся списке свойств выберите идентификаторы оборудования или идентификаторы совместимости.

Список аппаратных идентификаторов также можно получить программным путем получения свойства 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