Как получить путь к экземпляру устройства из драйвера ядра Windows?

Взгляните на этот пример: сообщается, что USB-устройство в Windows 7 имеет путь экземпляра устройства (DevinstPath) USB\VID_1EAB&PID_0501\7&25C389C1&0&1, и я точно знаю, что он соответствует так называемому аппаратному ключу. (hwkey) в реестре.

введите здесь описание изображения

введите здесь описание изображения

Теперь мой вопрос: когда мой код драйвера KMDF имеет дескриптор WDFDEVICE для этого USB-устройства, как я могу узнать его DevinstPath?

я знаю что могу

  • отправить BusQueryDeviceID для получения так называемого идентификатора устройства USB\VID_1EAB&PID_0501;
  • отправьте BusQueryInstanceID, чтобы получить так называемый идентификатор экземпляра 1 .

Но я не знаю, как получить так называемый «путь к экземпляру». Может ли какой-нибудь гуру ядра любезно сказать мне, как я могу это получить?

Документ MSDN кажется очень расплывчатым!

Кстати: я также понимаю, что функция пользовательского уровня SetupDiGetDeviceInstanceId фактически возвращает DevinstPath, хотя она и называется «InstanceId».


person Jimm Chen    schedule 27.06.2017    source источник


Ответы (2)


Путь экземпляра устройства можно запросить с помощью DEVPKEY_Device_InstanceId, используя либо WdfDeviceAllocAndQueryPropertyEx, либо IoGetDevicePropertyData (передавая объект физического устройства WDM).

person Brian    schedule 17.08.2018
comment
Спасибо большое. Проверено на Win81, IoGetDevicePropertyData с PropertyKey=&DEVPKEY_Device_InstanceId действительно работает. Жаль, что для этого нужна Vista+. - person Jimm Chen; 27.08.2018
comment
WdfDeviceAllocAndQueryPropertyEx требуется KMDF 1.13, поэтому он не является стандартной опцией даже для Windows 7. - person Jimm Chen; 27.08.2018

Идентификатор экземпляра устройства представляет собой последовательность автоинкремента. Вы можете найти HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum в реестре; Правила: NextPareneID.XXXXXXXX.N XXXXXX использовать значения crc32 для расчета UUID (проверка прошла успешно) N — 1–9. Формат идентификатора экземпляра устройства – N&PareneID&случайный номер и индекс.

введите здесь описание изображения

person jingshaq    schedule 01.12.2018