функция 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-устройства