Поделиться через


Создание идентификаторов контейнеров из возможностей съемных устройств

Если драйвер шины не может предоставить идентификатор контейнера для узла устройства (devnode), который он перечисляет, диспетчер Plug and Play (PnP) использует возможность съемного устройства для создания идентификатора контейнера для всех перечисленных для устройства devnodes. Дополнительные сведения о возможности съемных устройств см. в статье Общие сведения о возможности съемных устройств.

Следующая эвристика описывает, как идентификаторы контейнеров создаются из возможности съемных устройств.

  1. Если для функции съемного устройства devnode задано значение TRUE, создайте новый идентификатор контейнера для devnode.

  2. Если для возможности съемного устройства devnode задано значение FALSE, наследуйте идентификатор контейнера от его родительского devnode.

Devnode не может перечислить дочерние devnodes, пока не будет инициализирован и не запущен стек драйверов . Как только идентификатор контейнера назначается во время инициализации, devnode готов распространить свой идентификатор контейнера на любой из его несъемных дочерних элементов по мере их перечисления.

Devnode с возможностью съемного устройства со значением TRUE считается самым верхним (родительским) devnode для устройства, и для этого devnode создается идентификатор контейнера.

Все дочерние элементы этого родительского devnode наследуют один и тот же идентификатор контейнера, если для них самих не задано значение TRUE. В этом случае съемному дочернему devnode назначается другой идентификатор контейнера и он становится родительским devnode этого съемного устройства. Все дочерние элементы этого devnode наследуют один и тот же идентификатор контейнера.

Например, предположим, что мышь с одной функцией подключена к компьютеру через USB. В этом случае драйвер шины USB обнаруживает новое устройство и определяет, что оно является УСТРОЙСТВОм с интерфейсом ЧЕЛОВЕКА USB (HID). Затем драйвер шины USB создает для устройства devnode USB HID. HiD devnode также обнаруживает, что устройство HID является мышью, и создает дочерний devnode для hid-совместимой мыши.

Применение этой эвристики к этому примеру приводит к следующим действиям:

  1. Создается devnode USB HID. Для возможности съемного устройства для этого devnode задано значение TRUE , так как его родительский USB-концентратор devnode распознал, что он подключен к внешнему USB-порту.

  2. Идентификатор контейнера создается для этого devnode, так как это самый верхний devnode съемного устройства. В результате этот devnode считается родительским devnode для съемного устройства.

  3. Будет создан HID-совместимый devnode мыши. Возможность съемного устройства на этом devnode имеет значение FALSE , так как его родительский usb HID devnode сообщает, что все его дочерние элементы являются неустранимыми. В этом случае HID-совместимый devnode мыши наследует идентификатор контейнера родительского devnode.

Благодаря этому эвристическим данным каждому узлу devnode, который принадлежит мыши, назначается один и тот же идентификатор контейнера. Диспетчер PnP успешно сгруппировал devnodes в логическое устройство, даже если для устройства нет уникального идентификатора.

Примечание

Успех этой эвристики зависит от конкретного водителя шины, который правильно сообщает возможности съемных устройств для каждого перечислимого devnode. Драйвер шины должен убедиться, что родительский devnode устройства должен быть установлен как съемный, а его дочерние devnodes не должны быть установлены как съемные.