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

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

Примечание В Windows 8 USBD_SelectConfigUrbAllocateAndBuild заменяет USBD_CreateConfigurationRequestEx и USBD_CreateConfigurationRequest.
 

Синтаксис

NTSTATUS USBD_SelectConfigUrbAllocateAndBuild(
  [in]  USBD_HANDLE                   USBDHandle,
  [in]  PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
  [in]  PUSBD_INTERFACE_LIST_ENTRY    InterfaceList,
  [out] PURB                          *Urb
);

Параметры

[in] USBDHandle

Дескриптор USBD, полученный драйвером клиента при предыдущем вызове процедуры USBD_CreateHandle .

[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 структур. Длина массива зависит от количества интерфейсов в дескрипторе конфигурации. Дополнительные сведения см. в подразделе "Примечания".

[out] Urb

Указатель на структуру URB , которая получает urb, выделенную USBD_SelectConfigUrbAllocateAndBuild. Драйвер клиента должен освободить URB после завершения использования драйвера путем вызова USBD_UrbFree.

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

Подпрограмма USBD_SelectConfigUrbAllocateAndBuild возвращает код состояния NT.

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

Код возврата Описание
STATUS_SUCCESS
Запрос выполнен успешно.
STATUS_INVALID_PARAMETER
Вызывающий объект передал недопустимое значение параметра. ЗНАЧЕНИЕ USBDHandle или Urb равно NULL.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно доступной памяти для выполнения запроса.

Комментарии

Перед вызовом USBD_SelectConfigUrbAllocateAndBuild драйвер клиента должен выполнить следующие задачи:

  1. Получение количества интерфейсов в конфигурации. Эти сведения содержатся в элементе bNumInterfacesструктуры USB_CONFIGURATION_DESCRIPTOR , на которую указывает ConfigurationDescriptor.
  2. Создание массива USBD_INTERFACE_LIST_ENTRY структур. Количество элементов в массиве должно быть на один больше числа интерфейсов. Инициализируйте массив, вызвав RtlZeroMemory.
  3. Получите дескриптор интерфейса для каждого интерфейса (или его альтернативного параметра) в конфигурации. Эти дескрипторы интерфейса можно получить, вызвав USBD_ParseConfigurationDescriptorEx.
  4. Для каждого элемента (кроме последнего) в массиве задайте для элемента InterfaceDescriptor адрес дескриптора интерфейса. Для первого элемента массива задайте для элемента InterfaceDescriptor адрес дескриптора интерфейса, представляющего первый интерфейс в конфигурации. Аналогичным образом для n-гоэлемента в массиве задайте для элемента InterfaceDescriptor адрес дескриптора интерфейса, представляющего n-йинтерфейс в конфигурации.
  5. Элемент InterfaceDescriptor последнего элемента должен иметь значение NULL.
USBD_SelectConfigUrbAllocateAndBuild выполняет следующие задачи:
  • Создает URB и заполняет его сведениями о указанной конфигурации, ее интерфейсах и конечных точках, а также задает тип запроса URB_FUNCTION_SELECT_CONFIGURATION.
  • Заполняет структуру USBD_INTERFACE_INFORMATION в URB для каждого интерфейса.
  • Задает элемент Interfacen-гоэлемента массива USBD_INTERFACE_LIST_ENTRY , предоставленного вызывающим объектом, адрес соответствующей структуры USBD_INTERFACE_INFORMATION в URB.
С помощью полученного указателя на структуру URB можно отправить запрос на выборку конфигурации в стек драйверов USB для установки указанной конфигурации. Кроме того, для получения сведений об интерфейсе можно использовать элемент Interface каждого USBD_INTERFACE_INFORMATION структуры в массиве. В каждой структуре USBD_INTERFACE_INFORMATION элемент "Каналы" представляет собой массив USBD_PIPE_INFORMATION структур. Каждая структура USBD_PIPE_INFORMATION содержит сведения о каналах, открытых (стеком драйверов USB) для конечных точек в этом интерфейсе. Вы можете получить дескрипторы канала из массива и сохранить их для будущих запросов ввода-вывода к устройству.

Требования

Требование Значение
Минимальная версия клиента Требуется WDK для Windows 8. Предназначен для Windows Vista и более поздних версий операционной системы Windows.
Целевая платформа Персональный компьютер
Верхняя часть usbdlib.h
Библиотека Usbdex.lib
IRQL DISPATCH_LEVEL

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

USBD_CreateConfigurationRequestEx

USBD_CreateHandle