Instance ID

Идентификатор экземпляра — это строка, сообщаемая перечислителем устройства (драйвером шины), и отличает устройство от других устройств того же типа на компьютере. Идентификатор экземпляра содержит сведения о серийном номере, если он поддерживается базовой шиной, или какие-либо сведения о расположении. Строка не может содержать символы "\" или другие символы, запрещенные в ответе на запрос IRP_MN_QUERY_ID ; В противном случае универсальный формат строки зависит от шины. Число символов идентификатора экземпляра, за исключением признака конца NULL, должно быть меньше MAX_DEVICE_ID_LEN. Кроме того, идентификатор экземпляра является еще одним входным элементом при создании идентификатора экземпляра устройства, а также идентификатором устройства, а максимальная возможная длина идентификатора экземпляра устройства — MAX_DEVICE_ID_LEN. Для этого требуется, чтобы длина идентификатора экземпляра была достаточно меньше, чем MAX_DEVICE_ID_LEN для создания идентификатора экземпляра устройства в виде строки с длиной меньше MAX_DEVICE_ID_LEN.

Элемент UniqueID структуры DEVICE_CAPABILITIES устройства указывает, является ли предоставленный шиной идентификатор экземпляра уникальным в системе следующим образом:

  • Если значение UniqueID равно FALSE, предоставленный шиной идентификатор экземпляра устройства уникален только для шины устройства. Диспетчер Plug and Play (PnP) изменяет предоставленный шиной идентификатор экземпляра и объединяет его с соответствующим идентификатором устройства, чтобы создать уникальный в системе идентификатор экземпляра устройства.

  • Если параметр UniqueID имеет значение TRUE, идентификатор экземпляра устройства, сформированный из предоставленного шиной идентификатора устройства и идентификатора экземпляра, однозначно идентифицирует устройство в системе.

Идентификатор экземпляра сохраняется при перезапусках системы.

Диспетчер PnP запрашивает эту строку из драйвера шины устройства, используя запрос IRP_MN_QUERY_ID с полем Parameters.QueryId.IdType , заданным как BusQueryInstanceID.