【发布时间】:2009-04-06 22:10:46
【问题描述】:
许多 USB 设备都包含一个唯一的序列号(实际上是一个 Unicode 字符串),主机可以将其与 16 位供应商和产品 ID 号结合使用来唯一标识设备。
我试图弄清楚如何编写一个 Windows 应用程序,该应用程序能够显示连接到系统的所有 USB 人机接口设备的列表。该列表将为每个 HID 保留一行,包括系统键盘。列表中会有供应商 ID、产品 ID 和序列号列。
我可以通过使用HidD_GetHidGuid 返回的 GUID 调用 SetupDiGetClassDevs 并通过重复调用 SetupDiEnumDeviceInterfaces 循环结果来获取 USB HID 列表。然后我可以调用SetupDiGetDeviceInterfaceDetail 来获取每个设备的路径,我可以使用CreateFile 打开它,只要我小心地请求既不读取也不请求写入权限,这对于系统键盘将被拒绝。从那里我可以通过调用 HidD_GetAttributes 来获取供应商和产品 ID 号。
我无法弄清楚如何检索序列号字符串。当我搜索此问题的解决方案时,我发现了很多关于如何获取 USB 大容量存储设备的序列号的信息,但似乎没有任何信息适用于任何其他类型的 USB 设备。我很高兴发现检索序列号字符串的通用方法或 HID 特定方法。
我感觉 libusb 的 Win32 端口可以轻松解决这个问题,但不幸的是,我需要一个仅依赖于 Windows 附带的库的解决方案,例如 setupapi 和 hid DLL包含上述功能。
非常感谢任何建议!
【问题讨论】: