我已经能够使用SetupAPI枚举USB设备,我已经从WDK查看了usbview应用程序,但我仍然无法弄清楚如何获取USB_DEVICE_DESCRIPTOR。
有人能指出我正确的方向吗?如果没有从Hub开始,是不是可以以一种很好的方式从WinAPI获取这些信息?
答案 0 :(得分:0)
您最好的选择是从设备路径中提取信息,并使用SetupDi函数来获取其他的碎片。据我所知,设备路径始终遵循相同的约定。即:
" \\?\ USB#vid_的 0000 强>&安培; PID_的 1111 强>#的 SERIAL 强>#{的 GUID 强>}" 其中0000是VID,1111是PID作为十六进制字符串。 SERIAL是硬件提供的串行或OS分配的串行值。
我个人发现了一个实例,我绝对想要获取设备描述符以便以这种方式拉出串口。在某些情况下,操作系统无法识别我的硬件提供的序列号。我在硬件方面修复了这个问题,但我仍然希望在PC端容纳旧硬件。以下是我的方法。可能有更好的东西,但这是我迄今为止提出的最好的。你可能仍然认为它是" hack-ish"虽然。
- 编辑 -
正如Ben在评论中指出的那样,你可以通过在步骤4中获得的父节点开发节点上使用CM_Get_Device_ID来跳过步骤5,6和7.将此字符串中的斜杠(\)更改为磅( #)。前置" \\?\"然后追加"#{f18a0e88-c30c-11d0-8815-00a0c906bed8}"。在步骤8中将其用作设备路径。这可以避免迭代系统上的所有集线器设备:)