структура _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 для запроса открытого потока и примера кода см. в статье Как открывать и закрывать статические потоки вмассовой конечной точки USB.
После завершения работы драйвера клиента с помощью потоков драйвер может закрыть все потоки, связанные с определенной конечной точкой, отправив запрос на закрытие потока. Чтобы отправить запрос, драйвер клиента должен указать сведения о конечной точке в структуре _URB_PIPE_REQUEST. _URB_PIPE_REQUEST hdr должен быть URB_FUNCTION_CLOSE_STATIC_STREAMS; элемент PipeHandle должен быть дескриптором конечной точки, содержащей используемые потоки.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 8 |
заголовка | usb.h |
См. также
Как открывать и закрывать статические потоки в массовой конечной точки USB