我试图了解 HID 和复合设备是如何定义的。
如何(从操作系统方面)知道最近连接的 USB 设备只能输入数据(而不能像硬盘一样连接、运行可执行文件等)?
后续问题是:如果答案是连接的 USB 设备必须是 HID,那么该 HID 是否可以由键盘/鼠标组合组成,例如带有集成触控板的键盘?
答案1
问题并不像上面那样简单。USB 识别远不止“一个鼠标、一根电缆 = HID VS 一个鼠标、一个键盘、一根电缆 = 复合”。
例如,单个键盘可以是 HID 和/或复合 USB 设备,如果您曾经拥有一个带有内置宏和照明的“游戏玩家”键盘,并且它有自己的存储来保存这些宏以便旅行,那就是复合设备,因为它在一条总线中集成了多个设备。
相反的是,罗技无线鼠标键盘组合可能只是一个 HID 设备,因为这是唯一存在的类,虽然可能有两个设备,但它们都只是 HID。
USB 复合设备是一种支持多种设备类别的外围设备。许多不同的设备都以复合设备的形式实现。例如,它们由某种设备类别组成,但也由存储了所有必要驱动程序的 USB 磁盘组成,因此可以自动安装设备,而无需访问某种驱动程序软件。
然后有一个关于 Windows 如何看待设备的问题。
当新的 USB 设备连接到主机时,USB 总线驱动程序会为该设备创建一个物理设备对象 (PDO),并生成 PnP 事件来报告新的 PDO。然后,操作系统会向总线驱动程序查询与 PDO 关联的硬件 ID。
总线驱动程序还会检查设备描述符的设备类 (bDeviceClass)、子类 (bDeviceSubClass) 和协议 (bDeviceProtocol) 字段。如果这些字段为零,则表示该设备是复合设备,总线驱动程序会为 PDO 报告额外的兼容标识符 (ID) USB\COMPOSITE。
我希望这能帮助您进一步了解这个主题。