我认为这在设计上是不可能的。当 USB 被发明时,它被用来取代繁琐的通信方法,如并行和串行电缆、使用标准化电缆和插头的专有接口。它还将通过标准化较低层驱动程序模型来解决编程问题,以便可以更轻松地对驱动程序进行编程。
最后,我想说 USB 的存在是因为它具有热插拔功能。这无疑是当今计算机最舒适的功能之一。我记得如果您在启动时忘记插入键盘(例如服务器)会多么痛苦:其中一些需要完全重新启动才能检测到 PS/2 键盘。
那时没有人考虑安全问题。USB 记忆棒不存在,所有连接到 USB 的设备或多或少都是愚蠢的。因此 USB 不使用标准化的方式来刷新固件或检测“非法”行为。
USB集线器是一个非常愚蠢的设备:它处理将新设备热插拔插入通信(AFAIK通过短暂地强行中断所有其他设备)和移除。它可以查看设备的电力需求,并在新设备消耗过多电力时禁止新设备上线。这主要是全部,而且没关系:它们既便宜又非常快。
USB 集线器不会检查通过的数据,控制器也不会。它根本不是为了做到这一点而设计的,也没有写在任何规范中。现在有人可能会争辩说,将端口使用限制为仅允许某些类可能与规范兼容但是:类设备也很复杂:想想组合的鼠标/键盘无线发射器。它将显示为多设备,同时显示鼠标和 HID 组件。它们中的大多数可以与基本的操作系统驱动程序一起运行,但也可以与特定的供应商软件一起使用,以允许增强功能,如附加功能键或高 DPI 率。我喜欢我的 Roccat 游戏鼠标,例如 havin 3200 dpi。因此,在注册为类设备后,如果在 PC 上安装了正确的驱动程序,它会以某种方式切换模式。
所有其他东西必须由操作系统处理。是否允许加载驱动程序完全掌握在操作系统内核的手中。市场上有软件可以控制 USB 端口的使用,这些软件可以按照您想要的方式运行。
恕我直言,您尝试修复错误的问题:如果您担心 USB 安全,您应该简单地关闭所有 USB 端口或查找/要求可以在操作系统级别实现您想要的策略的操作软件。例如,Linux 可以通过自定义内核限制为仅使用某些 USB 驱动程序。