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

Структура _URB_CONTROL_TRANSFER_EX используется драйверами USB-клиента для передачи данных в канал управления или из нее с превышением времени ожидания, которое ограничивает допустимое время передачи.

Синтаксис

struct _URB_CONTROL_TRANSFER_EX {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  ULONG                Timeout;
  ULONG                Pad;
  struct _URB_HCD_AREA hca;
  UCHAR                SetupPacket[8];
};

Члены

Hdr

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

PipeHandle

Дескриптор для канала.

Если target является конечной точкой управления по умолчанию, pipeHandle должен иметь значение NULL. В этом случае transferFlags должен содержать флаг USBD_DEFAULT_PIPE_TRANSFER.

Если target является конечной точкой элемента управления, отличной от конечной точки по умолчанию, PipeHandle указывает непрозрачный дескриптор для канала управления. Драйвер контроллера узла возвращает этот дескриптор, когда драйвер клиента выбирает конфигурацию устройства с URB типа URB_FUNCTION_SELECT_CONFIGURATION или когда драйвер клиента изменяет параметры интерфейса с URB типа URB_FUNCTION_SELECT_INTERFACE.

TransferFlags

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

Значение Значение
USBD_TRANSFER_DIRECTION_IN
Задано для запроса данных с устройства. Для передачи данных на устройство этот флаг должен быть снят.
USBD_TRANSFER_DIRECTION_OUT
Задано для передачи данных на устройство. Установка этого флага эквивалентна снятию флага 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_DEFAULT_PIPE_TRANSFER
Задано для указания контроллера узла для выполнения передачи элементов управления по каналу управления по умолчанию. Это позволяет вызывающей стороны отправлять команды в канал управления по умолчанию без явного указания дескриптора канала.

TransferBufferLength

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

TransferBuffer

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

TransferBufferMDL

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

Timeout

Указывает время (в миллисекундах) до истечения времени ожидания URB. Значение 0 указывает на отсутствие времени ожидания для этого URB.

Pad

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

hca

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

SetupPacket[8]

Указывает определенный USB-пакет установки запроса. Формат пакета установки запроса USB можно найти в спецификации usb-ядра.

Комментарии

Эта структура URB идентична _URB_CONTROL_TRANSFER, за исключением того, что элемент Timeout устанавливает время ожидания для URB.

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

Требования

Требование Значение
Минимальная версия клиента Доступно в Операционных системах Windows Vista и более поздних версий.
Верхняя часть usb.h (включая Usb.h)

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

URB

Структуры USB

_URB_CONTROL_TRANSFER

_URB_HEADER