47

Допустим, у меня есть мышь. Я подключаю эту мышь в слот 1 из 4 на компьютере. Он проходит через обнаруженное новое устройство и все, что хорошо. Но если я вернусь позже с той же мышью и подключу ее, скажем, к гнезду 3, он снова обнаружит! Почему это?

2 ответа2

61

По словам Раймонда Чена:

Почему Windows не распознает мое USB-устройство как одно и то же устройство, если я подключаю его к другому порту?

Возможно, вы заметили, что если вы возьмете USB-устройство и подключите его к компьютеру, Windows распознает его и настроит. Затем, если вы отключите его и подключите к другому USB-порту, Windows получит приступ амнезии и подумает, что это совершенно другое устройство, вместо того, чтобы использовать настройки, которые применялись, когда вы подключали его в прошлый раз. Это почему?

Люди с устройства USB объяснили, что это происходит, когда на устройстве отсутствует серийный номер USB.

Серийные номера являются дополнительными на устройствах USB. Если устройство есть, Windows распознает устройство независимо от того, к какому USB-порту вы его подключаете. Но если у него нет серийного номера, то Windows обрабатывает каждое появление на другом USB-порту, как если бы это было новое устройство.

(Я помню, что один крупный производитель USB-устройств не совсем понимал, как работают серийные номера. Они дали серийные номера всех своих устройств, это здорово, но все они получили один и тот же серийный номер. Захватывающие вещи произошли, если вы подключили два их устройства к компьютеру одновременно.)

Но почему Windows рассматривает его как другое устройство, если ему не хватает серийного номера и он отображается на другом порту? Почему он не может просто сказать: «О, вот ты где, в другом порту».

Потому что это создает случайное поведение, когда вы подключаете два таких устройства. В зависимости от порядка, в котором устройства перечисляются в режиме Plug and Play, два набора настроек будут назначаться, по-видимому, случайным образом при каждой загрузке. Сегодня настройки совпадают в одну сторону, но завтра, когда устройства перечислены в другом порядке, настройки меняются местами. (Вы получаете аналогичное непонятное поведение, если подключаете устройства в другом порядке.)

Другими словами: вещи сосут, потому что (1) вещи уже были в плохом состоянии - это не было бы проблемой, если бы у устройства был правильный серийный номер - и (2), как только вы оказались в этом плохом состоянии, альтернатива сосет больше , USB-стек просто пытается исправить плохую ситуацию, не ухудшая ее.

3

Windows (поскольку вы не указываете свою ОС, я предполагаю, что это то, что вы используете) связывает устройство с портом, к которому оно подключено, поэтому она считала «USB-диск A в порту X» отличным от «USB-диска A в порт Y ", и он связывает драйверы и записи реестра соответственно.

Если вы используете опцию "показывать неподключенные устройства" при просмотре диспетчера устройств, вы увидите, что устройство подключено ко всем портам, к которым оно когда-либо подключено, но затенено, поскольку в данный момент его нет. Когда вы подключаете устройство к одному из этих портов, Windows просто активирует этот экземпляр драйвера, а когда вы подключаете его к другому порту, перед его активацией необходимо будет определить новый экземпляр драйвера для этого порта (это процесс, который вы видите как пользователь отображается как "добавление нового устройства".

Это позволяет подключать идентичные устройства к разным портам, работающим одновременно. Существуют и другие способы достижения этого, практически без разницы для конечного пользователя, какой метод использует ОС, но именно так Windows решает организовать это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .