Как получить путь к экземпляру устройства из драйвера ядра 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".

2 ответа

Решение

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

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

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

Другие вопросы по тегам