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


функция 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 адрес дескриптора интерфейса, представляющего первый интерфейс в конфигурации. Аналогичным образом для элемента nth в массиве задайте элементу InterfaceDescriptor адрес дескриптора интерфейса, представляющего интерфейс nth в конфигурации.
  5. Элемент InterfaceDescriptor последнего элемента должен иметь значение NULL.
USBD_SelectConfigUrbAllocateAndBuild выполняет следующие задачи:
  • Создает URB и заполняет его сведениями о указанной конфигурации, его интерфейсах и конечных точках и задает тип запроса для URB_FUNCTION_SELECT_CONFIGURATION.
  • Заполняет структуру USBD_INTERFACE_INFORMATION в URB для каждого интерфейса.
  • Задает элемент интерфейса элемента nth массива, предоставленного вызывающим USBD_INTERFACE_LIST_ENTRY, адрес соответствующей структуры USBD_INTERFACE_INFORMATION в URB.
Вы можете использовать полученный указатель на структуру URB для отправки запроса на выборку конфигурации в стек USB-драйверов, чтобы задать указанную конфигурацию. Кроме того, для получения сведений об интерфейсе можно использовать интерфейс член каждой 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