如何从 Windows 内核驱动程序获取设备实例路径?
How to get Device Instance Path from Windows kernel driver?
看看这个例子:Windows 7 中的一个 USB 设备被报告有 Device instance path(DevinstPath) USB\VID_1EAB&PID_0501&25C389C1&0&1 并且我确切地知道它对应于注册表中所谓的硬件密钥(hwkey)。
现在我的问题是:当我的 KMDF 驱动程序代码具有该 USB 设备的 WDFDEVICE 句柄时,我如何知道它的 DevinstPath?
我知道我可以
- 发送一个BusQueryDeviceID来实现所谓的device-id USB\VID_1EAB&PID_0501;
- 发送一个BusQueryInstanceID来实现所谓的instance-id1.
但我不知道如何得到所谓的"instance-path"。有内核大师可以告诉我如何获得吗?
MSDN 文档对此似乎含糊不清!
顺便说一句:我也意识到用户层函数 SetupDiGetDeviceInstanceId 实际上是 returns DevinstPath——尽管它被命名为 "InstanceId".
可以使用DEVPKEY_Device_InstanceId查询设备实例路径,使用WdfDeviceAllocAndQueryPropertyEx
或IoGetDevicePropertyData
(传递WDM物理设备对象)
设备实例id是自增序列。
您可以在注册表中找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
;
Rules:NextPareneID.XXXXXXXX.N
XXXXXX 使用 UUID 计算 crc32 值(test ok)
N为1~9
Device Instance id格式为N&PareneID&random's number&index
enter image description here
看看这个例子:Windows 7 中的一个 USB 设备被报告有 Device instance path(DevinstPath) USB\VID_1EAB&PID_0501&25C389C1&0&1 并且我确切地知道它对应于注册表中所谓的硬件密钥(hwkey)。
现在我的问题是:当我的 KMDF 驱动程序代码具有该 USB 设备的 WDFDEVICE 句柄时,我如何知道它的 DevinstPath?
我知道我可以
- 发送一个BusQueryDeviceID来实现所谓的device-id USB\VID_1EAB&PID_0501;
- 发送一个BusQueryInstanceID来实现所谓的instance-id1.
但我不知道如何得到所谓的"instance-path"。有内核大师可以告诉我如何获得吗?
MSDN 文档对此似乎含糊不清!
顺便说一句:我也意识到用户层函数 SetupDiGetDeviceInstanceId 实际上是 returns DevinstPath——尽管它被命名为 "InstanceId".
可以使用DEVPKEY_Device_InstanceId查询设备实例路径,使用WdfDeviceAllocAndQueryPropertyEx
或IoGetDevicePropertyData
(传递WDM物理设备对象)
设备实例id是自增序列。
您可以在注册表中找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
;
Rules:NextPareneID.XXXXXXXX.N
XXXXXX 使用 UUID 计算 crc32 值(test ok)
N为1~9
Device Instance id格式为N&PareneID&random's number&index
enter image description here