функция USBD_SelectConfigUrbAllocateAndBuild (usbdlib.h)
Подпрограмма USBD_SelectConfigUrbAllocateAndBuild выделяет и форматирует структуру URB, необходимую для выбора конфигурации USB-устройства.
Синтаксис
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.
Возможные значения включают, но не ограничиваются кодами состояния, перечисленными в следующей таблице.
Возвращаемый код | Описание |
---|---|
|
Запрос выполнен успешно. |
|
Вызывающий объект передал недопустимое значение параметра. USBDHandle или Urb имеет значение NULL. |
|
Недостаточно памяти для выполнения запроса. |
Замечания
Перед вызовом USBD_SelectConfigUrbAllocateAndBuildдрайвер клиента должен выполнить следующие задачи:
- Получите количество интерфейсов в конфигурации. Эти сведения содержатся в элементе bNumInterfaces структуры USB_CONFIGURATION_DESCRIPTOR, на которую указывает ConfigurationDescriptor.
- Создайте массив структур USBD_INTERFACE_LIST_ENTRY. Число элементов в массиве должно быть больше, чем количество интерфейсов. Инициализировать массив путем вызова RtlZeroMemory.
- Получите дескриптор интерфейса для каждого интерфейса (или его альтернативного параметра) в конфигурации. Эти дескрипторы интерфейса можно получить, вызвав USBD_ParseConfigurationDescriptorEx.
- Для каждого элемента (за исключением последнего элемента) в массиве задайте элементу InterfaceDescriptor адрес дескриптора интерфейса. Для первого элемента массива задайте элементу InterfaceDescriptor адрес дескриптора интерфейса, представляющего первый интерфейс в конфигурации. Аналогичным образом для элемента nth в массиве задайте элементу InterfaceDescriptor адрес дескриптора интерфейса, представляющего интерфейс nth в конфигурации.
- Элемент InterfaceDescriptor последнего элемента должен иметь значение NULL.
- Создает URB и заполняет его сведениями о указанной конфигурации, его интерфейсах и конечных точках и задает тип запроса для URB_FUNCTION_SELECT_CONFIGURATION.
- Заполняет структуру USBD_INTERFACE_INFORMATION в URB для каждого интерфейса.
- Задает элемент интерфейса элемента nth массива, предоставленного вызывающим USBD_INTERFACE_LIST_ENTRY, адрес соответствующей структуры USBD_INTERFACE_INFORMATION в URB.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Требуется WDK для Windows 8. Предназначено для Windows Vista и более поздних версий операционной системы Windows. |
целевая платформа | Настольный |
заголовка | usbdlib.h |
библиотеки | Usbdex.lib |
IRQL | DISPATCH_LEVEL |