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