【问题标题】:How to get Device Instance Path from Windows kernel driver?如何从 Windows 内核驱动程序获取设备实例路径?
【发布时间】:2017-06-27 09:09:40
【问题描述】:

看一下这个例子:Windows 7中的USB设备被报告有Device instance path(DevinstPath) USB\VID_1EAB&PID_0501\7&25C389C1&0&1 我知道它对应的就是所谓的注册表中的硬件密钥(hwkey)。

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

我知道我可以

  • 发送一个BusQueryDeviceID来实现所谓的device-id USB\VID_1EAB&PID_0501
  • 发送一个BusQueryInstanceID,实现所谓的instance-id 1

但我不知道如何获得所谓的“实例路径”。可以请一些内核专家告诉我如何获得它吗?

MSDN 文档在这方面似乎真的很模糊!

顺便说一句:我也意识到用户层函数 SetupDiGetDeviceInstanceId 实际上返回了 DevinstPath——尽管它被命名为“InstanceId”。

【问题讨论】:

    标签: windows-kernel


    【解决方案1】:

    可以使用DEVPKEY_Device_InstanceId查询设备实例路径,使用WdfDeviceAllocAndQueryPropertyExIoGetDevicePropertyData(传递WDM物理设备对象)

    【讨论】:

    • 非常感谢。在 Win81 上验证,IoGetDevicePropertyDataPropertyKey=&DEVPKEY_Device_InstanceId 确实有效。可惜这个需要Vista+。
    • WdfDeviceAllocAndQueryPropertyEx 需要 KMDF 1.13,因此即使对于 Windows 7,它也不是股票期权。
    【解决方案2】:

    设备实例 id 是自增序列。 您可以在注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum; 规则:NextPareneID.XXXXXXXX.N XXXXXX使用UUID计算crc32值(测试ok) N为1~9 Device Instance id 格式为 N&PareneID&random's number&index

    enter image description here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2016-12-10
      • 2013-02-01
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多