функция USBD_CreateConfigurationRequestEx (usbdlib.h)

Подпрограмма USBD_CreateConfigurationRequestEx выделяет и форматирует URB , чтобы выбрать конфигурацию для USB-устройства.

USBD_CreateConfigurationRequestEx заменяет USBD_CreateConfigurationRequest.

Синтаксис

PURB USBD_CreateConfigurationRequestEx(
  [in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
  [in] PUSBD_INTERFACE_LIST_ENTRY    InterfaceList
);

Параметры

[in] ConfigurationDescriptor

Указатель на структуру, выделенную вызывающим объектом USB_CONFIGURATION_DESCRIPTOR , содержащую дескриптор конфигурации для выбранной конфигурации. Как правило, драйвер клиента отправляет URB типа URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE (см . _URB_CONTROL_DESCRIPTOR_REQUEST) для получения сведений о конфигурациях, интерфейсах, конечных точках, поставщике и дескрипторах класса с USB-устройства. Если драйвер клиента указывает USB_CONFIGURATION_DESCRIPTOR_TYPE в качестве типа дескриптора, запрос получает все сведения об устройстве в USB_CONFIGURATION_DESCRIPTOR структуре. Затем драйвер передает полученный указатель на структуру USB_CONFIGURATION_DESCRIPTOR в параметре ConfigurationDescriptor .

[in] InterfaceList

Указатель на первый элемент выделенного вызывающим объектом массива USBD_INTERFACE_LIST_ENTRY структур. Длина массива зависит от количества интерфейсов в дескрипторе конфигурации. Количество элементов в массиве должно быть на один больше числа интерфейсов в конфигурации. Инициализируйте массив, вызвав RtlZeroMemory. Элемент InterfaceDescriptor последнего элемента в массиве должен иметь значение NULL.

Возвращаемое значение

USBD_CreateConfigurationRequestEx выделяет структуру URB , форматирует ее для запроса URB_FUNCTION_SELECT_CONFIGURATION (запрос на выборку конфигурации) и возвращает указатель на URB. Затем драйвер клиента может использовать возвращенный URB для отправки запроса select-configuration драйверу контроллера узла для настройки конфигурации. После завершения использования urb необходимо освободить.

Комментарии

Сведения о том, как создать выбор конфигурации и пример кода, см. в разделе Выбор конфигурации для USB-устройства.

Возвращаемое значение является указателем на структуру URB , которую можно использовать для отправки запроса на выборку конфигурации драйверу контроллера узла для задания указанной конфигурации.

После того как стек USB-драйвера завершит запрос на выборку конфигурации, можно проверить структуры USBD_INTERFACE_INFORMATION . Элемент "Каналы " USBD_INTERFACE_INFORMATION указывает на массив USBD_PIPE_INFORMATION структур. Драйвер USB-шины заполняет массив структур USBD_PIPE_INFORMATION сведениями о каналах, связанных с конечными точками интерфейса. Драйвер клиента может получить дескрипторы канала из Pipes[i].PipeHandle и использовать их для отправки запросов ввода-вывода в определенные каналы.

После завершения всех операций с возвращенным URB необходимо освободить URB , вызвав ExFreePool.

Дескриптор конфигурации и массив можно выделить из невыгружаемого или выгружаемого пула. Вызывающие элементы этой подпрограммы могут выполняться в irQL <= DISPATCH_LEVEL, если память, на которую указывают ConfigurationDescriptor и InterfaceList , выделена из непагированного пула. В противном случае вызывающие операторы должны выполняться в DISPATCH_LEVEL IRQL < .

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть usbdlib.h (включая Usbdlib.h)
Библиотека Usbd.lib
IRQL DISPATCH_LEVEL (см. примечания)

См. также раздел

Выбор конфигурации для USB-устройства

Справочник по программированию драйверов USB-устройств

USBD_INTERFACE_INFORMATION

_URB_SELECT_CONFIGURATION