在Windows下检索USB键盘的序列号

许多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的setupapihid DLL。

任何build议将非常感激!

您是否尝试过与DDK一起提供的USBVIew源代码。 USBView工具显示任何USB设备的序列号,并且该源随DDK提供。