有多种方法可以检索 HID 设备的 Windows“设备名称”,GetRawInputDeviceInfo,其中 RIDI_DEVICENAME 是一种方法。
给出示例名称:
\?\HID#VID_FEED&PID_DEAD#6&3559c8ea&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}
我想知道是否有任何文档说明该字符串中的内容?
\?\HID#VID_AAAA&PID_BBBB#C&DDDDDD&E&FFFF#{GUID}
所以最明显的是 A(VID)、B(PID) 和最后的 GUID。我想知道 C、D、E 和 F 到底是什么?
即使您插入两个完全相同的 HID 设备,C 和 D 似乎也是唯一的,这对我的问题很有帮助,但如果我能确切地知道这是如何在每个操作系统的基础上确定的,我会感觉更舒服,或者至少它遵循某种已知的格式。
我一直像个疯子一样在谷歌上搜索试图弄清楚这一点,我是否遗漏了一些明显的东西?
提前致谢
根据类似的 MSDN 帖子,该值代表唯一的设备实例 ID:
设备实例ID对于物理设备来说是唯一且恒定的 设备插入的位置,但它也是不透明的,应该 不被解析。这意味着它可以用于字符串比较,但是 不用于解释。
这个末尾带有 GUID 的字符串 - 实际上是 设备接口实例 id(符号链接名称)。是的,它是独一无二的,并且在系统重新启动后仍然存在。一些细节也这里。
您可以在接口实例 id 上使用
CM_Get_Device_Interface_Property
或 SetupDiGetDeviceInterfaceProperty
与 DEVPKEY_Device_InstanceId
来获取设备实例 id(一个设备可以有多个接口)。
在您的示例中 - 您有一个 HID 设备。其设备 ID 格式描述于here。
有关一般 USB 设备 ID 格式的信息是这里。
获得设备实例 ID 后,您可以使用
CM_Get_DevNode_Property
或 SetupDiGetDeviceProperty
与 DEVPKEY_NAME
来获取设备的本地化友好名称(显示在设备管理器中)。
总结一下:
\\?\HID#VID_203A&PID_FFFC&MI_01#7&2de99099&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}
- 是设备接口 ID(在文档中也称为“设备接口路径”或“设备接口符号名称”)。这是虚拟设备文件系统中的路径。{378de44c-56ef-11d1-bc8c-00a0c91405dd}
- 设备接口类 GUID(在本例中为 GUID_DEVINTERFACE_MOUSE。它确定可以在此设备上调用哪些 IOCTL。IOCTL_MOUSE_QUERY_ATTRIBUTES 在本例中)HID\VID_203A&PID_FFFC&MI_01\7&2de99099&0&0000
- 是 设备实例 id注意:确切的
device interface id
格式没有记录,每个设备接口都可以生成它想要的文件名。我不建议您解析它 - 它可能会在以后的 Windows 版本中更改,最好获取 device instance id
- 它的格式已记录。