структура _URB_CONTROL_TRANSFER (usb.h)
Структура _URB_CONTROL_TRANSFER используется драйверами USB-клиента для передачи данных в канал управления или из нее.
Синтаксис
struct _URB_CONTROL_TRANSFER {
struct _URB_HEADER Hdr;
USBD_PIPE_HANDLE PipeHandle;
ULONG TransferFlags;
ULONG TransferBufferLength;
PVOID TransferBuffer;
PMDL TransferBufferMDL;
struct _URB *UrbLink;
struct _URB_HCD_AREA hca;
UCHAR SetupPacket[8];
};
Члены
Hdr
Указатель на структуру _URB_HEADER , указывающую сведения о заголовке URB. Функция Hdr.Function должна быть URB_FUNCTION_CONTROL_TRANSFER, а Hdr.Length — .sizeof(_URB_CONTROL_TRANSFER)
PipeHandle
Дескриптор для канала управления.
Если целевой объект является конечной точкой управления по умолчанию, pipeHandle должен иметь значение NULL. В этом случае TransferFlags должен содержать флаг USBD_DEFAULT_PIPE_TRANSFER.
Если target является конечной точкой элемента управления, отличной от конечной точки по умолчанию, PipeHandle указывает непрозрачный дескриптор для канала управления. Драйвер хост-контроллера возвращает этот дескриптор, когда драйвер клиента выбирает конфигурацию устройства с urb типа URB_FUNCTION_SELECT_CONFIGURATION или когда драйвер клиента изменяет параметры для интерфейса с URB типа URB_FUNCTION_SELECT_INTERFACE.
TransferFlags
Задает ноль, единицу или сочетание следующих флагов:
Значение | Значение |
---|---|
|
Задано для запроса данных с устройства. Для передачи данных на устройство этот флаг должен быть снят. |
|
Задано для передачи данных на устройство. Установка этого флага эквивалентна снятию флага USBD_TRANSFER_DIRECTION_IN. |
|
Параметр указывает контроллеру узла не возвращать ошибку при получении пакета от устройства, который короче максимального размера пакета для конечной точки. Максимальный размер пакета для конечной точки указывается в элементе bMaxPacketSize0 структуры USB_DEVICE_DESCRIPTOR (дескриптор устройства) для конечной точки управления по умолчанию. Для конечной точки управления, отличной от используемой по умолчанию, максимальный размер пакета задается в элементе wMaxPacketSize структуры USB_ENDPOINT_DESCRIPTOR (дескриптор конечной точки).
Когда контроллер узла получает пакет, длина которого короче значения wMaxPacketSize в конечной точке управления, поведение в зависимости от типа контроллера узла выглядит следующим образом:
|
|
Параметр указывает контроллеру узла на передачу элементов управления по каналу управления по умолчанию. Это позволяет вызывающей объекту отправлять команды в управляющий канал по умолчанию без явного указания дескриптора канала. |
TransferBufferLength
Указывает длину (в байтах) буфера, указанного в TransferBuffer или описанного в разделе TransferBufferMDL. Драйвер хост-контроллера возвращает количество байтов, отправленных или считываемых из канала в этом элементе.
TransferBuffer
Указатель на резидентный буфер для передачи или имеет значение NULL , если MDL предоставляется в TransferBufferMDL. Содержимое этого буфера зависит от значения Параметра TransferFlags. Если указан USBD_TRANSFER_DIRECTION_IN этот буфер будет содержать данные, считанные с устройства при возврате из драйвера контроллера узла. В противном случае этот буфер содержит предоставленные драйвером данные для передачи на устройство.
TransferBufferMDL
Указатель на MDL, описывающий резидентный буфер, или имеет значение NULL , если буфер предоставлен в TransferBuffer. Содержимое буфера зависит от значения Параметра TransferFlags. Если указан USBD_TRANSFER_DIRECTION_IN, описанный буфер будет содержать данные, считываемые с устройства при возвращении из драйвера контроллера узла. В противном случае буфер содержит предоставленные драйвером данные для передачи на устройство. Этот MDL-файл должен быть выделен из непагрегированного пула.
UrbLink
Зарезервировано. Не используется.
hca
Зарезервировано. Не используется.
SetupPacket[8]
Указывает пакет установки запроса, определяемый USB. Формат пакета настройки запроса USB можно найти в спецификации USB-ядра.
Комментарии
Структура URB_CONTROL_TRANSFER_EX идентична структуре URB_CONTROL_TRANSFER, за исключением того, что она предоставляет значение времени ожидания в поле Timeout (Время ожидания ).
Зарезервированные элементы этой структуры должны рассматриваться как непрозрачные и зарезервированы для использования системой.
Требования
Требование | Значение |
---|---|
Заголовок | usb.h (включая Usb.h) |