Шина USB физически разработана таким образом, что хост-контроллер может распознать действие по вставке (и снятию) вилки. Когда происходит это событие "plug", хост-контроллер информирует свой драйвер устройства, который сканирует шину, и просит каждое устройство идентифицировать себя.
Все USB-устройства содержат набор информации об устройстве, называемый дескрипторами. Дескрипторы устройства извлекаются со всех устройств одной и той же командой. Это позволяет драйверу устройства для самой шины USB эффективно спрашивать вновь подключенное устройство, что это такое, и ожидать разумного ответа.
Из всех дескрипторов только немногие напрямую используются для сопоставления драйверов с большинством устройств. Это связано с тем, что USB определяет классы устройств, и обычно системного драйвера для каждого класса устройств достаточно для обработки любых устройств, которые утверждают, что находятся в этом классе.
Все клавиатуры будут принадлежать к классу HID (Human Interface), как, например, мыши, планшеты и игровые контроллеры. Класс HID имеет несколько подклассов (клавиатуры, мыши и т.д.), Поэтому каждый из них обрабатывается ожидаемым образом.
Большинство дискообразных устройств будут претендовать на класс Mass Storage, и системный драйвер работает только для них.
В дополнение к классу и подклассу дескрипторы также включают идентификатор поставщика (VID), идентификатор продукта (PID) и редакцию. Идентификаторы поставщиков назначаются комитетом по стандартам (в основном в порядке выдачи, но некоторые компании получают специальные запросы: например, intel - 0x8086). Идентификаторы продукта назначаются каждым поставщиком, и комбинация VID и PID должна быть уникальной для каждого выпущенного продукта.
Когда устройство впервые установлено, VID, PID, редакция, класс и подкласс используются предсказуемым образом для выбора загружаемого драйвера устройства. Наличие названий поставщиков и конкретных продуктов позволяет поставщику настроить устройство, которое в противном случае могло бы быть обработано (почти) корректно драйвером стандартной системы.
Другим важным дескриптором является серийный номер устройства. Если у устройства есть серийный номер, то при повторном подключении его можно распознать и обработать одинаково, даже если используется другой физический порт USB. Это важно для устройств хранения, чтобы им назначалась одинаковая буква диска, и для устройств, таких как адаптеры последовательного порта и модемы, чтобы им было назначено одинаковое обозначение COM-порта.
Весь этот процесс задокументирован в MSDN, но детали разбросаны по разным местам.