如何从Windows内核驱动程序获取设备实例路径?

时间:2017-06-27 09:09:41

标签: windows-kernel

看一下这个例子:据报道,Windows 7中的USB设备具有设备实例路径(DevinstPath) USB \ VID_1EAB& PID_0501 \ 7& 25C389C1& 0& 1 ,我完全知道它对应于注册表中所谓的硬件密钥(hwkey)。

enter image description here

enter image description here

现在我的问题是:当我的KMDF驱动程序代码具有该USB设备的WDFDEVICE句柄时,我怎么知道它的DevinstPath?

我知道我可以

  • 发送 BusQueryDeviceID 以实现所谓的device-id USB \ VID_1EAB& PID_0501 ;
  • 发送 BusQueryInstanceID 以实现所谓的instance-id 1

但我不知道如何获得所谓的“实例路径”。一些内核大师能否告诉我如何才能得到它?

MSDN doc似乎对此非常模糊!

BTW:我也意识到用户层函数 SetupDiGetDeviceInstanceId 实际上返回了DevinstPath - 尽管它被命名为“InstanceId”。

2 个答案:

答案 0 :(得分:1)

可以使用 DEVPKEY_Device_InstanceId ,通过WdfDeviceAllocAndQueryPropertyExIoGetDevicePropertyData(传递WDM物理设备对象)来查询

设备实例路径

答案 1 :(得分:0)

设备实例ID为自动递增序列。 您可以在注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum; 规则:NextPareneID.XXXXXXXX.N XXXXXX使用UUID计算crc32值(测试正常) N是1〜9 设备实例ID格式为N&PareneID&random的数字和索引

enter image description here