连接的USB设备分类

Classification of USB devices connected

我正在编写一个 C# 应用程序来监视和记录连接到 windows 系统的不同 USB 设备。使用 Window 的设置 API,我能够获得 VID、PID、硬件 ID 和友好名称等详细信息。我想问的是 Windows 有没有办法检查连接的设备是智能手机、打印机、大容量存储设备还是调制解调器?

注意:使用 SetupGerDeviceRegistryProperty() 我能够获得设备描述,但对于所有设备,它显示设备描述是 USB 复合设备。

您可以使用 SetupDiGetDeviceRegistryPropertySPDRP_SERVICE 参数来获取为设备节点安装的驱动程序的名称。驱动程序的名称通常表明所连接的设备类型,只要它使用的是属于 Windows 的标准驱动程序即可。您还可以查看 SPDRP_COMPATIBLEIDS,这是用于 select 那些标准驱动程序的 ID。实际上 SPDRP_CLASSSPDRP_CLASSGUID 可能是最好的;我认为其中之一对应于设备在设备管理器中显示的类别。

听起来您的设备是复合设备,因此您需要访问复合设备的子设备而不是复合设备本身。一种方法是调用 SetupDiGetClassDevs(NULL, "USB", NULL, 0),这将 return 包含所有 USB 设备及其所有子设备的设备信息集。