Идентификаторы контейнеров, созданные при переопределении возможностей съемных устройств
Начиная с Windows 7, новые устройства должны предоставлять уникальный идентификатор шины (как описано в разделе Идентификаторы контейнеров, созданные из Bus-Specific уникальный идентификатор).
Кроме того, устройства и драйверы шины должны правильно задать возможность съемных устройств (как описано в разделе Идентификаторы контейнеров, созданные из возможности съемных устройств). Дополнительные сведения о возможности съемных устройств см. в статье Общие сведения о возможности съемных устройств.
Windows 7 и более поздние версии Windows также поддерживают механизм переопределения сообщаемой возможности съемного устройства. Этот механизм полезен для устаревших устройств, которые неправильно сообщают о возможности съемных устройств.
Хотя механизм переопределения не изменяет значение возможности съемных устройств, он заставляет диспетчер PnP использовать параметр переопределения, а не значение возможности съемных устройств при создании идентификаторов контейнеров для устройств.
С помощью этого механизма переопределения идентификатор контейнера можно создать с помощью метода на основе реестра. Как только идентификатор контейнера создается для самого верхнего (родительского) узла устройства (devnode) устройства, тот же идентификатор контейнера наследуется каждым дочерним devnode устройства с помощью эвристики, описанной в разделе Идентификаторы контейнеров, созданные из возможности съемного устройства.
Механизм переопределения — это таблица подстановки на основе реестра, состоящая из разделов реестра, которые сопоставляются с определенными устройствами. Эта таблица переопределения хранится в разделе реестра DeviceOverrides и состоит из следующих разделов реестра и подразделов.
Уровень таблицы | Имя раздела или подраздела реестра | Описание |
---|---|---|
1 |
Родительский ключ для всех переопределений возможностей съемных устройств. |
|
2 |
Указывает идентификатор оборудования устройства, к которому применяется возможность переопределения съемных устройств. Имя этого подраздела является фактическим идентификатором оборудования, при этом все символы обратной косой черты ('')) заменены числовыми символами ('#'). |
|
2 |
Указывает совместимый идентификатор устройства, к которому применяется переопределение возможности съемных устройств. Имя этого подраздела является фактическим идентификатором оборудования, при этом все символы обратной косой черты ('')) заменены числовыми символами ('#'). |
|
3 |
Указывает, что только путь к расположению родительского узла устройства (devnode) будет иметь переопределение возможности съемных устройств. |
|
3 |
Указывает, что к пути расположения дочерних devnodes устройства будет применено переопределение возможностей съемных устройств.
Примечание На родительский devnode указанного устройства не влияет переопределение возможности съемных устройств, если не указан подраздел реестра LocationPaths или для родительского devnode не указан подраздел реестра ChildLocationPaths .
|
|
4 |
Указывает дискретный путь к расположению devnode, к которому применяется переопределение возможности съемных устройств. Имя этого подраздела — это фактический путь к расположению одного экземпляра devnode устройства, установленного на компьютере. |
|
4 |
Указывает, что переопределение возможности съемных устройств применяется ко всем devnodes для указанного устройства. |
В подразделах LocationPath и * реестра значение DWORD (Съемный) указывает, считаются ли применимые devnodе съемными (1) или не съемными (0).
Пример 1
Ниже показано переопределение устройства для devnode, соответствующего подразделу реестра HardwareID , а также путь к расположению, указанный в подразделе реестра LocationPaths .
В этом примере переопределение отключает возможность съемных устройств и применяется ко всем устройствам devnodes с идентификатором оборудования USB\VID_1234&PID_5678 по пути расположения PCIROOT(0)#PCI(102)#USBROOT(0)#USB(1).
Ниже приведен пример формата таблицы реестра для этого переопределения.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceOverrides
USB#VID_1234&PID_5678
LocationPaths
PCIROOT(0)#PCI(102)#USBROOT(0)#USB(1)
Removable=0
В этом примере USB#VID_1234&PID_5678
— это имя подраздела реестра HardwareID , а PCIROOT(0)#PCI(102)#USBROOT(0)#USB(1)
— имя подраздела реестра LocationPath .
Это переопределение изменяет интерпретацию топологии устройства диспетчером Plug and Play (PnP). Обратите внимание, что devnode со значением идентификатора оборудования USB\VID_1234&PID_5678 был помечен в реестре как не съемный. Новый идентификатор контейнера не создается для этого devnode, так как диспетчер PnP интерпретирует devnode как не удаляемый из родительского. Вместо этого USB-VID_1234&PID_5678 (и все его дочерние элементы) наследуют идентификатор контейнера (ContainerID {A}) родительского элемента.
Результатом этого переопределения является группирование одного устройства, так как все devnodes в дереве имеют одинаковый идентификатор контейнера. USB-VID_1234&PID_5678 устройства интерпретируется как интегрированное с компьютером.
На следующей схеме показана итоговая топология устройства и связанное назначение идентификатора контейнера.
В предыдущем примере показана часто встречающаяся топология devnode: переносные компьютеры с устройствами, жестко подключенными к определенным расположениям шины, которые неправильно сообщают о себе как съемные. Устройства, физически интегрированные с компьютером, например веб-камера или биометрический датчик (отпечаток пальца), не должны считаться съемными, так как пользователь не может физически отделить их от компьютера. Съемное переопределение позволяет независимому поставщику оборудования (IHV) или изготовителю исходного оборудования (OEM) изменять способ интерпретации диспетчером PnP возможности съемных устройств и тем самым влиять на назначение идентификатора контейнера для устройства.
Пример 2
Ниже показано переопределение возможностей съемных устройств для всех devnodes, соответствующих определенному значению идентификатора оборудования .
В этом примере переопределение включает возможность съемных устройств, а переопределение применяется к devnodes со значением идентификатора оборудования USB\VID_062A&PID_0000.
Ниже приведено общее описание формата таблицы реестра для этого переопределения.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceOverrides
USB#VID_062A&PID_00001
LocationPaths
*
Removable=1
1 Имя подраздела реестра HardwareID .
В этом примере devnode с идентификатором оборудования USB\VID_1234&PID_5678 правильно сообщает о возможности съемных устройств. Диспетчер PnP создает идентификатор контейнера (ContainerID {B}) для него и всех его дочерних devnodes.
Однако дочерний devnode с идентификатором оборудования USB\VID_062A&PID_0000 соответствует переопределению. В результате диспетчер PnP создает еще один автономный идентификатор (ContainerID {C}) для этого devnode и всех его дочерних devnodes.
Как и ранее, это переопределение изменяет интерпретацию топологии устройства диспетчером PnP. Физическому устройству назначается два идентификатора контейнера, и Windows видит его как два устройства. Обратите внимание, что devnode с идентификатором оборудования USB\VID_062A&PID_0000 интерпретируется как съемный при группировке devnodes в устройства. Это не изменяет значение, указанное devnode для возможности съемных устройств.
Кроме того, был указан подраздел реестра *, указывающий, что это переопределение должно применяться ко всем devnodes на компьютере с идентификатором оборудования USB\VID_062A&PID_0000.
На следующей схеме показана итоговая топология устройства и связанное назначение идентификатора контейнера.