Creo que esto no es posible por diseño. Cuando se inventó el USB, se hizo para reemplazar métodos de comunicación engorrosos como los cables paralelos y seriales, interfaces propietarias con un cable y enchufe estandarizados. También abordaría los problemas de programación al estandarizar el modelo de controlador de capa inferior para que los controladores puedan programarse más fácilmente.
Finalmente, diría que el USB existe debido a sus capacidades de conexión en caliente. Esta es una de las características más cómodas de las computadoras de hoy. Recuerdo el dolor en el trasero si se olvidara de conectar el teclado en el momento del arranque (servidor, por ejemplo): algunos de ellos necesitaban un reinicio completo para detectar el teclado PS / 2.
Nadie pensaba en cuestiones de seguridad en ese momento. Las memorias USB no existían, y todos los dispositivos conectados a USB eran más o menos estúpidos. Por lo tanto, USB no utiliza formas estandarizadas de actualizar el firmware o detectar un comportamiento "ilegal".
Un concentrador USB es un dispositivo realmente estúpido: maneja la inserción en caliente de un nuevo dispositivo en la comunicación (AFAIK, interrumpiendo brevemente a todos los demás) y la eliminación. Puede ver cuáles son los requisitos de alimentación de un dispositivo y prohibir que un nuevo dispositivo se conecte si consume demasiada energía. Eso es todo, y está bien así: pueden ser baratos y muy rápidos.
Un concentrador USB no inspeccionará los datos que pasan, ni el controlador. Simplemente no está diseñado para hacerlo, y esto no está escrito en ninguna especificación. Se podría argumentar ahora que restringir el uso del puerto para permitir solo ciertas clases podría ser compatible con las especificaciones PERO: Los dispositivos de clase también son complicados: piense en un transmisor inalámbrico de teclado / mouse combinado. Se mostrará como un dispositivo múltiple, exponiendo tanto un mouse como un componente HID. La mayoría de ellos pueden ejecutarse con controladores de SO básicos, pero también pueden usarse con un software de un proveedor específico para permitir funciones mejoradas como teclas de función adicionales o altas tasas de DPI. Me encanta mi ratón de juego Roccat para tener 3200 dpi por ejemplo. Por lo tanto, después de registrarse como dispositivo de clase, de alguna manera cambia el modo si el controlador correcto está instalado en la PC.
Todas las demás cosas deben ser manejadas por el sistema operativo. Permitir la carga de un controlador o no está totalmente en manos del núcleo del sistema operativo. Existe un software en el mercado para controlar el uso de los puertos USB que podrían comportarse de la forma que desee.
En mi humilde opinión, intenta solucionar el problema incorrecto: si está preocupado por la seguridad del USB, simplemente debe apagar todos los puertos USB o buscar o solicitar un software operativo que pueda lograr las políticas que desea en el nivel del SO Linux, por ejemplo, podría estar restringido para usar solo ciertos controladores USB a través de un núcleo personalizado.