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