连接的USB设备分类
Classification of USB devices connected
我正在编写一个 C# 应用程序来监视和记录连接到 windows 系统的不同 USB 设备。使用 Window 的设置 API,我能够获得 VID、PID、硬件 ID 和友好名称等详细信息。我想问的是 Windows 有没有办法检查连接的设备是智能手机、打印机、大容量存储设备还是调制解调器?
注意:使用 SetupGerDeviceRegistryProperty()
我能够获得设备描述,但对于所有设备,它显示设备描述是 USB 复合设备。
您可以使用 SetupDiGetDeviceRegistryProperty
和 SPDRP_SERVICE
参数来获取为设备节点安装的驱动程序的名称。驱动程序的名称通常表明所连接的设备类型,只要它使用的是属于 Windows 的标准驱动程序即可。您还可以查看 SPDRP_COMPATIBLEIDS
,这是用于 select 那些标准驱动程序的 ID。实际上 SPDRP_CLASS
和 SPDRP_CLASSGUID
可能是最好的;我认为其中之一对应于设备在设备管理器中显示的类别。
听起来您的设备是复合设备,因此您需要访问复合设备的子设备而不是复合设备本身。一种方法是调用 SetupDiGetClassDevs(NULL, "USB", NULL, 0)
,这将 return 包含所有 USB 设备及其所有子设备的设备信息集。
我正在编写一个 C# 应用程序来监视和记录连接到 windows 系统的不同 USB 设备。使用 Window 的设置 API,我能够获得 VID、PID、硬件 ID 和友好名称等详细信息。我想问的是 Windows 有没有办法检查连接的设备是智能手机、打印机、大容量存储设备还是调制解调器?
注意:使用 SetupGerDeviceRegistryProperty()
我能够获得设备描述,但对于所有设备,它显示设备描述是 USB 复合设备。
您可以使用 SetupDiGetDeviceRegistryProperty
和 SPDRP_SERVICE
参数来获取为设备节点安装的驱动程序的名称。驱动程序的名称通常表明所连接的设备类型,只要它使用的是属于 Windows 的标准驱动程序即可。您还可以查看 SPDRP_COMPATIBLEIDS
,这是用于 select 那些标准驱动程序的 ID。实际上 SPDRP_CLASS
和 SPDRP_CLASSGUID
可能是最好的;我认为其中之一对应于设备在设备管理器中显示的类别。
听起来您的设备是复合设备,因此您需要访问复合设备的子设备而不是复合设备本身。一种方法是调用 SetupDiGetClassDevs(NULL, "USB", NULL, 0)
,这将 return 包含所有 USB 设备及其所有子设备的设备信息集。