Мне любопытно, как распознавание USB-устройства работает в Windows. Я предполагаю, что это - что-то вроде этого:
Я прав? Если так, это все еще оставляет некоторые вопросы.
Кто-либо может объяснить, как этот процесс действительно работает? Кроме того, другие Ose делают это по-другому?
Шина USB физически разработана так, чтобы действие вставки (и удаление) разъем могло быть распознано хост-контроллером. Когда этот случай "разъема" происходит, хост-контроллер сообщает своему драйверу устройства, который сканирует шину и просит, чтобы каждое устройство идентифицировало себя.
Все USB-устройства содержат набор информации об устройстве, названном дескрипторами. Дескрипторы устройства получены от всех устройств с той же командой. Это позволяет драйверу устройства для самой Шины USB эффективно спрашивать недавно подключенное устройство, что это, и ожидайте получать разумный ответ.
Из всех дескрипторов только некоторые непосредственно используются для соответствия драйверам к большинству устройств. Это вызвано тем, что USB определяет классы устройств, и обычно системный драйвер для каждого класса устройства достаточен для обработки любых устройств, которые утверждают, что были в том классе.
Все клавиатуры будут утверждать, что были в HID (Интерфейс пользователя) класс, как будет мыши, планшеты и игровые контроллеры, например. Класс HID имеет несколько подклассов (клавиатуры, мыши, и т.д.), таким образом, каждый обрабатывается ожидаемым способом.
Большинство подобных диску устройств будет утверждать, что было в классе Массового хранения, и системный драйвер просто работает на тех также.
В дополнение к классу и подклассу, дескрипторы также включают идентификатор поставщика (VID), идентификатор продукта (PID) и пересмотр. Идентификаторы поставщика присвоены комитетом по стандартам (главным образом в порядке проблемы, но некоторые компании получили специальные запросы: Intel является 0x8086, например). Идентификаторы продукта присвоены каждым поставщиком, и комбинация VID и PID должна быть уникальна для каждого выпущенного продукта.
Когда устройство сначала установлено, VID, PID, пересмотр, класс и подкласс используются предсказуемым способом выбрать драйвер устройства, который загружается. Наличие поставщика и собственных имен продукта позволяет поставщику настроить устройство, которое могло бы иначе быть обработано (почти) правильно системным драйвером запаса.
Другой важный дескриптор является порядковым номером устройства. Если устройство имеет порядковый номер, то оно может быть распознано и рассматривало то же при включении снова, даже если используется другой физический USB-порт. Это важно для устройств хранения так, чтобы они присвоили ту же букву диска, и для устройств как адаптеры последовательного порта и модемы так, чтобы им дали то же обозначение COM-порта.
Этот целый процесс документируется в MSDN, но детали распространены среди множества мест.
Вопросы:
Lunatik имеет первую часть ответа, как так называемый драйвер шины находит устройство.