Поделиться через


структура _URB_CONTROL_VENDOR_OR_CLASS_REQUEST (usb.h)

Структура _URB_CONTROL_VENDOR_OR_CLASS_REQUEST используется драйверами USB-клиента для выдачи команды поставщика или класса устройству, интерфейсу, конечной точке или другому определенному устройству целевому объекту.

Синтаксис

struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
  struct _URB_HEADER   Hdr;
  PVOID                Reserved;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  UCHAR                RequestTypeReservedBits;
  UCHAR                Request;
  USHORT               Value;
  USHORT               Index;
  USHORT               Reserved1;
};

Члены

Hdr

Указатель на структуру _URB_HEADER , указывающую сведения о заголовке URB. Hdr.Function должен быть одним из URB_FUNCTION_CLASS_XXX или URB_FUNCTION_VENDOR_XXX GET_STATUS, а Hdr.Lengthsizeof(_URB_CONTROL_VENDOR_OR_CLASS_REQUEST).

Reserved

TransferFlags

Задает ноль, единицу или сочетание следующих флагов:

Значение Значение
USBD_TRANSFER_DIRECTION_IN
Задано для запроса данных с устройства. Для передачи данных на устройство этот флаг должен быть снят. Флаг должен быть установлен, если канал является каналом передачи прерываний.
USBD_SHORT_TRANSFER_OK
Задано, чтобы контроллер узла не возвращал ошибку при получении пакета от устройства, который короче максимального размера пакета для конечной точки. Максимальный размер пакета для конечной точки указывается в элементе bMaxPacketSize0 структуры USB_DEVICE_DESCRIPTOR (дескриптор устройства) для конечной точки управления по умолчанию. Для конечной точки управления, отличной от используемой по умолчанию, максимальный размер пакета задается в элементе wMaxPacketSize структуры USB_ENDPOINT_DESCRIPTOR (дескриптор конечной точки).

Когда контроллер узла получает пакет, длина которого короче значения wMaxPacketSize в конечной точке элемента управления, поведение в зависимости от типа контроллера узла выглядит следующим образом:

  • На контроллерах узла EHCI контроллер узла сразу переходит к этапу состояния передачи элемента управления. Передача завершается успешно, независимо от того, задана ли USBD_SHORT_TRANSFER_OK.
  • На контроллерах узлов UHCI и OHCI, если задано USBD_SHORT_TRANSFER_OK, контроллер узла переходит к этапу состояния. Если USBD_SHORT_TRANSFER_OK не задано, контроллер узла отменяет этапы передачи данных и состояния элемента управления, и передача завершается с ошибкой.

Этот флаг не следует устанавливать, если не задано USBD_TRANSFER_DIRECTION_IN.

TransferBufferLength

Указывает длину (в байтах) буфера, указанного в Параметре TransferBuffer или описанного в разделе TransferBufferMDL. Драйвер хост-контроллера возвращает количество байтов, отправленных или считанных из канала в этом элементе.

TransferBuffer

Указатель на постоянный буфер для передачи или имеет значение NULL , если MDL предоставляется в TransferBufferMDL. Содержимое этого буфера зависит от значения Параметра TransferFlags. Если указан USBD_TRANSFER_DIRECTION_IN, этот буфер будет содержать данные, считываемые с устройства при возврате из драйвера контроллера узла. В противном случае этот буфер содержит предоставленные драйвером данные для передачи на устройство.

TransferBufferMDL

Указатель на MDL, описывающий постоянный буфер, или имеет значение NULL , если буфер предоставляется в TransferBuffer. Содержимое буфера зависит от значения Параметра TransferFlags. Если указан USBD_TRANSFER_DIRECTION_IN, описанный буфер будет содержать данные, считываемые с устройства при возврате из драйвера контроллера узла. В противном случае буфер содержит предоставленные драйвером данные для передачи на устройство. Этот MDL должен быть выделен из непагрегированного пула.

UrbLink

Зарезервировано. Не используется.

hca

Зарезервировано. Не используется.

RequestTypeReservedBits

Зарезервировано. Не используется.

Request

Указывает код запроса USB или поставщика для устройства, интерфейса, конечной точки или другого целевого объекта, определяемого устройством.

Value

Задает значение запроса, которое становится частью пакета установки, определяемого USB, для целевого объекта. Это значение определяется создателем кода, используемого в запросе.

Index

Указывает определяемый устройством индекс, возвращаемый успешным запросом конфигурации, если запрос предназначен для конечной точки или интерфейса. В противном случае значение Index должно быть равно нулю.

Reserved1

Зарезервировано. Не используется.

Комментарии

Драйверы могут использовать формат подпрограммы службы UsbBuildVendorRequest в этом URB.

Зарезервированные элементы этой структуры должны рассматриваться как непрозрачные и зарезервированы для использования системой.

Требования

Требование Значение
Заголовок usb.h (включая Usb.h)

См. также раздел

URB

Структуры USB

_URB_HEADER