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

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

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

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

Ключ реестра Тип Ценность Значение по умолчанию
ИсходноеЗначениеКонфигурации REG_DWORD Индекс конфигурации USB. Usbccgp.sys сначала использует OriginalConfigurationValue для запроса на выборку конфигурации. 0
AltConfigurationValue REG_DWORD Индекс конфигурации, используемый, если запрос на выборку конфигурации с 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.