функция 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 адрес дескриптора интерфейса, представляющего первый интерфейс в конфигурации. Аналогичным образом для n-гоэлемента в массиве задайте для элемента InterfaceDescriptor адрес дескриптора интерфейса, представляющего n-йинтерфейс в конфигурации.
- Элемент InterfaceDescriptor последнего элемента должен иметь значение NULL.
- Создает URB и заполняет его сведениями о указанной конфигурации, ее интерфейсах и конечных точках, а также задает тип запроса URB_FUNCTION_SELECT_CONFIGURATION.
- Заполняет структуру USBD_INTERFACE_INFORMATION в URB для каждого интерфейса.
- Задает элемент Interfacen-гоэлемента массива USBD_INTERFACE_LIST_ENTRY , предоставленного вызывающим объектом, адрес соответствующей структуры USBD_INTERFACE_INFORMATION в URB.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Требуется WDK для Windows 8. Предназначен для Windows Vista и более поздних версий операционной системы Windows. |
Целевая платформа | Персональный компьютер |
Верхняя часть | usbdlib.h |
Библиотека | Usbdex.lib |
IRQL | DISPATCH_LEVEL |