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


Настройка Usbccgp.sys для выбора конфигурации USB, отличной от используемой по умолчанию

В этой статье содержатся сведения о параметрах реестра, которые настраивают способ выбора конфигурации USB Usbccgp.sys. В этом разделе также описывается, как Usbccgp.sys обрабатывает запросы на выборку конфигурации, отправленные драйвером клиента, который управляет одной из функций составного устройства.

Составное USB-устройство состоит из нескольких функций (функциональных устройств) в пределах одного USB-устройства. Если Windows загружает предоставленный Корпорацией Майкрософт usb Generic Parent Driver (Usbccgp.sys) для составного устройства, с этого момента Usbccgp.sys отвечает за выбор конфигурации устройства. Каждый интерфейс или коллекция интерфейсов составного устройства во многих отношениях похожа на отдельное устройство, которое имеет собственный объект физического устройства (PDO). Сброс конфигурации устройства изменяет конфигурацию для всех интерфейсов устройства, а не только для того, которым управляет драйвер клиента. Операционная система не разрешает это. Таким образом, драйвер клиента, управляющий набором интерфейсов или коллекцией интерфейсов составного устройства, не может изменить конфигурацию, изначально заданную Usbccgp.sys.

Однако в Windows Vista и более поздних версиях Windows можно добавить следующие значения реестра, чтобы указать конфигурацию для выбора:

Ключ реестра Тип Значение Значение по умолчанию
OriginalConfigurationValue REG_DWORD Индекс конфигурации USB. Usbccgp.sys сначала использует OriginalConfigurationValue для запроса на выборку конфигурации. 0
AltConfigurationValue REG_DWORD Индекс конфигурации, используемый в случае сбоя запроса select-configuration с OriginalConfigurationValue. 0

Примечание

Предыдущие параметры реестра отсутствуют по умолчанию. Они должны быть добавлены под аппаратным ключом (так же как "устройство") USB-устройства.

Параметр реестра позволяет драйверу CCGP выбрать альтернативную конфигурацию.

Значения реестра, описанные в предыдущей таблице, соответствуют индексу конфигурации, определяемого USB, который указывается членом bConfigurationValue дескриптора конфигурации (USB_CONFIGURATION_DESCRIPTOR), а не значениями bConfigurationNum , указанными в дескрипторе конфигурации устройства. Сначала Usbccgp.sys отправляет запрос на выборку конфигурации родительскому драйверу USB-шины (Usbhub.sys), используя индекс конфигурации USB, указанный в параметре OriginalConfigurationValue. Если этот запрос завершается сбоем, Usbccgp.sys пытается использовать значение, указанное в AlternateConfigurationValue. Usbccgp.sys использует значения по умолчанию, если значение AlternateConfigurationValue или OriginalConfigurationValue недопустимо.

Запрос на выборку конфигурации может завершиться ошибкой по многим причинам. Наиболее распространенный сбой возникает, когда устройство не отвечает должным образом на запрос или когда значение bMaxPower (питание, необходимое для запрошенной конфигурации) превышает значение питания, поддерживаемое портом концентратора. Например, значение bMaxPower для определенной конфигурации (указанное в OriginalConfigurationValue) равно 100 миллиамперам, но порт концентратора может предоставить только 50 миллиамперов. Когда Usbccgp.sys отправляет запрос на выборку конфигурации для этой конфигурации, стек драйверов USB (в частности, драйвер USB-порта) завершает запрос неудачей. Usbccgp.sys затем отправляет еще один запрос на выборку конфигурации, указывая конфигурацию, указанную altConfigurationValue. Если для альтернативной конфигурации требуется не более 50 миллиамперов и никаких других проблем не возникает, запрос на выборку конфигурации завершается успешно.

Функция совместимости

Несмотря на то, что драйвер клиента для функции на составном устройстве не может выбрать конфигурацию составного устройства, драйвер клиента по-прежнему может отправить запрос на выборку конфигурации Usbccgp.sys. Сведения о том, как создать этот запрос, см. в статье Выбор конфигурации для USB-устройства. Usbccgp.sys выполняет следующие задачи после получения запроса на выборку конфигурации от драйвера клиента:

  1. Проверяет полученный запрос, используя те же критерии, которые используются драйвером USB-порта для проверки всех запросов на выборку конфигурации.
  2. Если запрос задает параметры интерфейса или канала, отличные от текущих параметров, Usbccgp.sys отправляет запрос на выборку интерфейса, отправляя urb типа URB_FUNCTION_SELECT_INTERFACE изменить существующие параметры на новые параметры интерфейса и канала.
  3. Копирует кэшированное содержимое USBD_INTERFACE_INFORMATION и USBD_PIPE_INFORMATION структур в URB.
  4. Завершает URB.