структура _URB_OPEN_STATIC_STREAMS (usb.h)
Структура _URB_OPEN_STATIC_STREAMS используется драйвером USB-клиента для открытия потоков в указанной конечной точке массовых операций.
Чтобы отформатировать URB, вызовите функцию UsbBuildOpenStaticStreamsRequest .
Синтаксис
struct _URB_OPEN_STATIC_STREAMS {
struct _URB_HEADER Hdr;
USBD_PIPE_HANDLE PipeHandle;
ULONG NumberOfStreams;
USHORT StreamInfoVersion;
USHORT StreamInfoSize;
PUSBD_STREAM_INFORMATION Streams;
};
Члены
Hdr
Структура _URB_HEADER , указывающая сведения о заголовке URB. Hdr.Function должен быть URB_FUNCTION_OPEN_STATIC_STREAMS, а Hdr.Length — sizeof(_URB_OPEN_STATIC_STREAMS)
.
PipeHandle
Непрозрачный дескриптор для канала, связанного с конечной точкой, который поддерживает открываемые потоки.
Драйвер клиента получает PipeHandle из запроса URB_FUNCTION_SELECT_CONFIGURATION или URB_FUNCTION_SELECT_INTERFACE.
NumberOfStreams
Число открываемых потоков. Значение NumberOfStreams указывает количество элементов в массиве, на который указывает Streams. Это значение должно быть больше нуля и меньше или равно максимальному количеству потоков, поддерживаемых стеком USB-драйверов, хост-контроллером и конечной точкой на устройстве. Дополнительные сведения см. в подразделе "Примечания".
StreamInfoVersion
Версия структуры USBD_STREAM_INFORMATION . Должно быть задано значение URB_OPEN_STATIC_STREAMS_VERSION_100; В противном случае запрос завершается сбоем и состояние URB USBD_STATUS_INVALID_PARAMETER.
StreamInfoSize
Размер структуры USBD_STREAM_INFORMATION . StreamInfoSize должен иметь значение sizeof(USBD_STREAM_INFORMATION)
; в противном случае запрос завершается ошибкой и состояние URB USBD_STATUS_INFO_LENGTH_MISMATCH.
Streams
Указатель на выделенный вызывающим, инициализированный массив USBD_STREAM_INFORMATION структур. Длина массива зависит от количества открываемых потоков и должна совпадать со значением NumberOfStreams . Дополнительные сведения см. в подразделе "Примечания".
Комментарии
Чтобы использовать потоки (отличные от потока по умолчанию) в конечной точке для операций ввода-вывода, драйвер клиента открывает необходимые потоки, отправляя запрос открытого потока (URB_FUNCTION_OPEN_STATIC_STREAMS) в стек usb-драйверов. Для запроса драйвер клиента должен отформатировать URB путем инициализации структуры _URB_OPEN_STATIC_STREAMS . Чтобы отформатировать URB, вызовите функцию UsbBuildOpenStaticStreamsRequest .
Максимальное число потоков, которое может открыть драйвер клиента, должно быть меньше или равно максимальному числу потоков, поддерживаемым стеком USB-драйвера, контроллером узла и конечной точкой массовых операций. Чтобы получить максимальное количество потоков, поддерживаемых контроллером узла, вызовите USBD_QueryUsbCapability. Стек usb-драйверов поддерживает до 255 потоков. Если драйвер клиента запрашивает более 255 потоков, USBD_QueryUsbCapability не выполняется запрос. Чтобы получить максимальное количество потоков, поддерживаемых конечной точкой, проверьте дескриптор компаньона конечной точки (см. USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR в Usbspec.h).
Сведения о форматировании URB для запроса open-stream и примера кода см. в статье Открытие и закрытие статических потоков в массовой конечной точке USB.
После завершения работы драйвера клиента с потоками драйвер может закрыть все потоки, связанные с определенной конечной точкой, отправив запрос на закрытие потока. Чтобы отправить запрос, драйвер клиента должен указать сведения о конечной точке в структуре _URB_PIPE_REQUEST . Член HDR_URB_PIPE_REQUEST должен быть URB_FUNCTION_CLOSE_STATIC_STREAMS; Элемент PipeHandle должен быть дескриптором конечной точки, содержащей используемые потоки.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 |
Верхняя часть | usb.h |
См. также раздел
Открытие и закрытие статических потоков в массовой конечной точке USB