структура _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.Lengthsizeof(_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

URB

Структуры USB

_URB_HEADER