许多USB设备都包含一个唯一的序列号(实际上是一个Unicodestring),主机可以使用该序列号与16位供应商和产品ID号码一起唯一地标识设备。
我想弄清楚如何编写一个Windows应用程序,能够显示连接到系统的所有USB人机界面设备的列表。 该列表对每个HID都有一行,包括系统键盘。 产品ID,产品ID和序列号在列表中将有列。
通过使用由HidD_GetHidGuid
返回的GUID调用HidD_GetHidGuid
并通过重复调用SetupDiEnumDeviceInterfaces
循环遍历结果,我可以获得USB HID的列表。 然后,我可以调用SetupDiGetDeviceInterfaceDetail
来获取每个设备的path,我可以使用CreateFile
打开它,只要我小心地请求既不读取也不写入权限,这将被系统键盘拒绝。 从那里我可以通过调用HidD_GetAttributes
来获得供应商和产品ID号。
我搞不清楚如何检索序列号string。 当我search这个问题的解决scheme时,我发现很多关于如何获得USB大容量存储设备的序列号的信息,但没有看起来可能适用于任何其他types的USB设备。 我很乐意发现检索序列号string的通用方法或HID特定的方法。
我有一种感觉, libusb
的Win32端口可以pipe理这个没有太多的麻烦,但不幸的是,我需要一个解决scheme,只依赖于Windows库,如包含上述function的setupapi
和hid
DLL。
任何build议将非常感激!
您是否尝试过与DDK一起提供的USBVIew源代码。 USBView工具显示任何USB设备的序列号,并且该源随DDK提供。