El bus USB está diseñado físicamente para que el controlador host reconozca el acto de insertar (y quitar) un enchufe. Cuando ocurre este evento de "enchufe", el controlador host informa a su controlador de dispositivo que escanea el bus y le pide a cada dispositivo que se identifique.
Todos los dispositivos USB contienen una recopilación de información sobre el dispositivo, denominada descriptores. Los descriptores de dispositivo se recuperan de todos los dispositivos con el mismo comando. Esto permite que un controlador de dispositivo para el bus USB en sí mismo pregunte de manera efectiva a un dispositivo recién conectado qué es y espera obtener una respuesta razonable.
De todos los descriptores, solo unos pocos se usan directamente para hacer coincidir los controladores con la mayoría de los dispositivos. Esto se debe a que el USB define clases de dispositivos, y generalmente el controlador del sistema para cada clase de dispositivo es suficiente para manejar cualquier dispositivo que afirme estar en esa clase.
Todos los teclados afirman estar en la clase HID (interfaz humana), al igual que los ratones, tabletas y controladores de juegos, por ejemplo. La clase HID tiene varias subclases (teclados, ratones, etc.), por lo que cada una se maneja de la manera esperada.
La mayoría de los dispositivos con forma de disco afirman estar en la clase de almacenamiento masivo, y el controlador del sistema también funciona para ellos.
Además de la clase y la subclase, los descriptores también incluyen un ID de proveedor (VID), un ID de producto (PID) y una revisión. El comité de normas asigna las ID de los proveedores (principalmente en orden de emisión, pero algunas empresas recibieron solicitudes especiales: la inteligencia es 0x8086, por ejemplo). Las identificaciones de los productos son asignadas por cada proveedor, y la combinación de VID y PID debe ser única para cada producto lanzado.
Cuando se instala un dispositivo por primera vez, el VID, el PID, la revisión, la clase y la subclase se utilizan de manera predecible para elegir el controlador del dispositivo que se carga. Tener nombres específicos de proveedor y producto hace posible que un proveedor personalice un dispositivo que de otro modo podría ser manejado (casi) correctamente por el controlador del sistema de valores.
Otro descriptor importante es el número de serie del dispositivo. Si un dispositivo tiene un número de serie, puede reconocerse y tratarse de la misma manera cuando se vuelve a enchufar, incluso si se utiliza un puerto USB físico diferente. Esto es importante para los dispositivos de almacenamiento para que tengan la misma letra de unidad asignada, y para dispositivos como adaptadores de puerto serie y módems para que se les asigne la misma designación de puerto COM.
Todo este proceso está documentado en MSDN , pero los detalles están distribuidos en una variedad de lugares.