Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается 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-драйверов использует элемент состояния для возврата кода состояния для конкретного USB..
Чтобы отправить URB, драйвер клиента использует запрос IOCTL_INTERNAL_USB_SUBMIT_URB , который передается на устройство с помощью пакета запросов ввода-вывода (IRP) типа IRP_MJ_INTERNAL_DEVICE_CONTROL.
После того как стек USB-драйверов завершит обработку URB, стек драйверов использует член Status структуры URB для возврата кода состояния, специфичного для USB.
Замечание
Разработчики драйверов KMDF и UMDF должны использовать соответствующие интерфейсы платформы для взаимодействия с USB-устройством. Для получения дополнительной информации см. раздел о работе с USB-устройствами для драйверов KMDF и раздел о работе с USB-интерфейсами в UMDF. В этих разделах рассматриваются базовые интерфейсы драйверов WDM, используемые для связи с USB-устройством.
В этом разделе
Тема | Описание |
---|---|
выделение и создание | В этом разделе описывается, как драйвер USB-клиента может использовать подпрограммы драйверов Windows Driver Model (WDM) для выделения и форматирования URB перед отправкой запроса в стек USB-драйверов, предоставленный корпорацией Майкрософт. |
Отправка URB | В этом разделе описаны шаги, необходимые для отправки инициализированного URB в стек USB-драйверов для обработки конкретного запроса. |
Лучшие практики: Использование URBs | В этом разделе описаны рекомендации по использованию драйвера клиента для выделения, сборки и отправки URB в стек USB-драйверов, включенный в Windows 8. |