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


функция 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 для отправки запроса на выборку конфигурации драйверу контроллера узла, чтобы задать конфигурацию. После завершения работы с ним необходимо освободить 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, выделяется из непагрегированного пула. В противном случае вызывающие элементы должны выполняться в IRQL < DISPATCH_LEVEL.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка usbdlib.h (include Usbdlib.h)
библиотеки Usbd.lib
IRQL DISPATCH_LEVEL (см. примечания)

См. также

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

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

USBD_INTERFACE_INFORMATION

_URB_SELECT_CONFIGURATION