функция 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 для отправки запроса select-configuration драйверу контроллера узла для настройки конфигурации. После завершения использования 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 , выделена из непагированного пула. В противном случае вызывающие операторы должны выполняться в DISPATCH_LEVEL IRQL < .
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | usbdlib.h (включая Usbdlib.h) |
Библиотека | Usbd.lib |
IRQL | DISPATCH_LEVEL (см. примечания) |
См. также раздел
Выбор конфигурации для USB-устройства
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по