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


SRB_OPEN_STREAM

Драйвер класса отправляет этот запрос на открытие потока.

Возвращаемое значение

Мини-диск должен задать одно из следующих состояний в SRB:

STATUS_SUCCESS
Указывает на успешное выполнение команды.

STATUS_NOT_IMPLEMENTED
Указывает, что функция не поддерживается мини-накопителем.

STATUS_TOO_MANY_NODES
Указывает, что для открытия этого потока недостаточно ресурсов.

STATUS_IO_DEVICE_ERROR
Указывает, что произошел сбой оборудования.

Комментарии

Драйвер класса предоставляет буфер HW_STREAM_OBJECT в pSrb-StreamObject>, при этомpSrb-StreamObject-StreamNumber>> устанавливается номер открываемого потока. Указатель pSrb указывает на структуру HW_STREAM_REQUEST_BLOCK . StreamNumber соответствует смещению потока в HW_STREAM_DESCRIPTOR структуре, которая предоставляется мини-driver в ответ на запрос SRB_GET_STREAM_INFO . Драйвер класса задает формат данных, который должен предоставить открытый поток в pSrb-CommandData-OpenFormat.>>

Когда мини-диск получает этот запрос, он должен определить, можно ли открыть указанный поток в данный момент. Мини-driver также должен проверить переданный формат KSDATAFORMAT . поле OpenFormat SRB. Если поток можно открыть, мини-диск обновляет структуру HW_STREAM_OBJECT и возвращает STATUS_SUCCESS. Если уже открыто максимальное число экземпляров потока или аппаратные ресурсы, необходимые для открытия этого потока, недоступны, мини-driver возвращает соответствующее состояние ошибки.

Когда мини-диск получает команду SRB_OPEN_STREAM, она должна:

  1. Убедитесь, что максимальное число экземпляров потока не превышено и что значение индекса потока является допустимым.

  2. Убедитесь, что запрошенный формат данных является допустимым для этого потока.

  3. Задайте формат потока.

  4. Поддерживайте массив всех структур расширений потока в расширении устройства, чтобы irP можно было отменить из любого потока.

  5. Укажите указатели в объекте потока на обработчики данных потока и обработчики элементов управления.

  6. Установите флаг DMA в объекте потока, если устройство будет выполнять DMA непосредственно с адресами буфера данных, передаваемыми в подпрограммы ReceiveDataPacket . Если драйвер обращается к буферам данных, переданным с помощью логической адресации, также установите флаг PIO в объекте потока.

  7. Если поддержка часов доступна в потоке, укажите это с помощью элемента HwClockObject в объекте потока.