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


Общие сведения о указателях потоков

В более старой модели класса потоков мини-driver отвечает за обслуживание собственных очередей запросов потока данных (SRB). AVStream предоставляет эту функцию с помощью абстракции указателя потока. Указатель потока — это ссылка на конкретный кадр данных AVStream.

Мини-накопители, использующие обработку, ориентированную на закрепление (большинство аппаратных драйверов), используют указатели потоков для управления очередями закрепления. Каждый контакт имеет независимую очередь буферов данных. Когда пакет данных поступает в пин-код (запрос на чтение или запись), AVStream добавляет пакет в очередь и может вызвать диспетчеризацию процесса пин-кода.

Мини-накопители, использующие фильтрацию, не должны напрямую использовать указатели потока. Дополнительные сведения см. в разделе Фильтрация обработки .

По умолчанию каждая очередь имеет указатель на поток переднего края. При необходимости он может иметь указатель потока с конечным краем, если указан флаг конечного края. Мини-накопитель может создавать новые указатели потока, вызывая KsStreamPointerClone.

Указатель потока можно переместить только в одном направлении: в новый кадр. Это называется продвижением указателя потока.

Продвижение указателя потока

При перемещении указателя потока вы перемещаете его в новый кадр или перемещаете его на некоторое количество байтов в текущем кадре. Например, мини-диск может перенаправить указатель потока от первого поступления кадра к второму.

Для продвижения указателя потока фильтр, ориентированный на закрепление, может вызвать KsStreamPointerAdvance или KsStreamPointerUnlock с параметром Eject , равным TRUE.

Количество ссылок на кадры

Кадры с указателями потока, указывающими на них, считаются ссылочными, как и кадры, которые находятся в окне между начальным и конечным краями.

Когда мини-диск завершает работу с указателем потока, он может при необходимости вызвать KsStreamPointerSetStatusCode , чтобы указать код ошибки, с помощью которого необходимо завершить заданный пакет запроса ввода-вывода (IRP). Затем мини-driver должен вызвать KsStreamPointerDelete. Затем AVStream уменьшает количество ссылок на кадре, на который ранее ссылался удаленный указатель потока. Не удается удалить указатели на поток с начальным и конечным краями.