Код оборудования

Идентификатор оборудования — это определяемая поставщиком идентификационная строка, которую Windows использует для сопоставления устройства с пакетом драйверов. Идентификатор оборудования идентифицирует устройство и указывает, что любой пакет драйвера, объявляющий его, может работать с устройством, которое имеет этот идентификатор для определенной степени функциональности. В большинстве случаев с устройством связано несколько идентификаторов оборудования. Как правило, список идентификаторов оборудования сортируется от большинства до наименее подходящих для устройства. Например, список идентификаторов концептуального оборудования для устройства может выглядеть следующим образом:

<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>

Где фактические идентификаторы оборудования будут представлять эти концепции с помощью строк, которые соответствуют требованиям к формату идентификатора оборудования.

Создание идентификатора оборудования для устройства

Идентификаторы оборудования передаются диспетчеру Plug and Play (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. Это ограничение применяется к сумме длин всех полей и разделителей \\ полей в идентификаторе оборудования. Дополнительные сведения см. в разделе ОперацииIRP_MN_QUERY_ID.

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

Корневые перечислимые устройства являются особыми тем, что их можно создать с помощью API, где можно указать идентификатор оборудования. Корневые перечисленные устройства с идентификаторами оборудования, совместно использующие универсальные пространства имен, например, ROOT\SYSTEM могут конфликтовать и приводить к появляется желтый значок ошибки в диспетчер устройств при обновлении Windows.

Это можно предотвратить, используя уникальное пространство имен для каждого драйвера, у которого есть устройство с корневым перечислением. Для USB-устройства или системного устройства вместо использования ROOT\USB или используйте ROOT\[COMPANYNAME]\[DEVICENAME]ROOT\SYSTEM" . Затем перед установкой проверка, чтобы проверить наличие 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