Блоки запросов USB (URB)

В этой статье описывается блок запросов USB (URB) и приводятся сведения о том, как драйвер USB-клиента может использовать подпрограммы модели драйверов Windows (WDM) для выделения, сборки и отправки URB в стек драйверов USB.

Драйвер клиента универсальной последовательной шины (USB) не может напрямую взаимодействовать со своим устройством. Вместо этого драйвер клиента создает запросы и отправляет их в стек USB-драйверов для обработки. В каждом запросе драйвер клиента предоставляет структуру данных переменной длины, называемую блоком запросов USB (URB). Структура URB описывает сведения о запросе, а также содержит сведения о состоянии завершенного запроса. Драйвер клиента выполняет все операции, относящиеся к конкретному устройству, включая передачу данных, через URI. Драйвер клиента должен инициализировать URB со сведениями о запросе перед его отправкой в стек USB-драйверов. Для определенных типов запросов корпорация Майкрософт предоставляет вспомогательные подпрограммы и макросы, которые выделяют структуру URB и заполняют необходимые элементы структуры URB сведениями, предоставленными драйвером клиента.

Каждая URB начинается со стандартного заголовка фиксированного размера (_URB_HEADER), цель которого — определить тип запрошенной операции. Элемент Length_URB_HEADER указывает размер URB (в байтах). Член функции , который должен быть одним из ряда системных URB_FUNCTION_XXX констант, определяет тип запрашиваемой операции. Например, в случае передачи данных этот элемент указывает тип передачи. Коды функций URB_FUNCTION_CONTROL_TRANSFER, URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER и URB_FUNCTION_ISOCH_TRANSFER указывают на управление, массовые/прерывания и изохронные передачи соответственно. Стек usb-драйверов использует элемент Status для возврата кода состояния, относящегося к USB.

Чтобы отправить URB, драйвер клиента использует запрос IOCTL_INTERNAL_USB_SUBMIT_URB , который доставляется на устройство с помощью пакета запроса ввода-вывода (IRP) типа IRP_MJ_INTERNAL_DEVICE_CONTROL.

После завершения обработки URB стеком драйверов USB стек драйверов использует элемент Status структуры URB для возврата кода состояния, относящегося к USB.

Примечание

Разработчики драйверов KMDF и UMDF должны использовать соответствующие интерфейсы платформы для взаимодействия с USB-устройством. Дополнительные сведения см. в разделах Работа с USB-устройствами для драйверов KMDF и Работа с USB-интерфейсами в UMDF. В этих разделах рассматриваются базовые интерфейсы драйвера WDM, используемые для обмена данными с USB-устройствами.

В этом разделе

Раздел Описание
Выделение и создание urb В этом разделе описывается, как драйвер USB-клиента может использовать подпрограммы драйвера WDM для выделения и форматирования URB перед отправкой запроса в стек драйверов USB, предоставляемый Корпорацией Майкрософт.
Отправка URB В этом разделе описываются шаги, необходимые для отправки инициализированного URB в стек драйверов USB для обработки определенного запроса.
Рекомендации по использованию urb В этом разделе описываются рекомендации по использованию клиентского драйвера для выделения, сборки и отправки URB в стек драйверов USB, входящий в состав Windows 8.