Поделиться через


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

URB

СТРУКТУРЫ USB

_URB_HEADER