Функция KsStreamIo (ks.h)

Функция KsStreamIo выполняет потоковое чтение или запись для указанного объекта файла. Функция пытается использовать FastIoDispatch , если это возможно, или создает запрос на чтение или запись к объекту устройства.

Синтаксис

KSDDKAPI NTSTATUS KsStreamIo(
  [in]           PFILE_OBJECT            FileObject,
  [in, optional] PKEVENT                 Event,
  [in, optional] PVOID                   PortContext,
  [in, optional] PIO_COMPLETION_ROUTINE  CompletionRoutine,
  [in, optional] PVOID                   CompletionContext,
  [in, optional] KSCOMPLETION_INVOCATION CompletionInvocationFlags,
  [out]          PIO_STATUS_BLOCK        IoStatusBlock,
  [in, out]      PVOID                   StreamHeaders,
  [in]           ULONG                   Length,
  [in]           ULONG                   Flags,
  [in]           KPROCESSOR_MODE         RequestorMode
);

Параметры

[in] FileObject

Указывает объект файла для выполнения операций ввода-вывода.

[in, optional] Event

При необходимости содержит событие для использования в вводе-выводе. Если ни один из них не передается, предполагается, что вызов выполняется в синхронном объекте файла, или вызывающий объект ожидает события файлового объекта, иначе он может быть выполнен асинхронно. Если используется и флаг KSSTREAM_SYNCHRONOUS не установлен, это должно быть событие, выделенное диспетчером объектов. Если вызывающий объект выполняет асинхронные операции ввода-вывода, ему необходимо либо дождаться события объекта файла, либо передать событие в этом параметре и дождаться его. Если этого не сделать, вызывающий объект не сможет узнать, когда ioStatusBlock был обновлен вызовом.

[in, optional] PortContext

При необходимости содержит сведения о контексте для порта завершения.

[in, optional] CompletionRoutine

При необходимости указывает на подпрограмму завершения для этого IRP.

[in, optional] CompletionContext

Если указан параметр CompletionRoutine , он предоставляет указатель контекста в обратном вызове процедуры завершения.

[in, optional] CompletionInvocationFlags

Задает флаги вызова, указывающие, когда вызывается подпрограмма завершения. Используемые значения см. в следующей таблице.

[out] IoStatusBlock

Расположение для возврата сведений о состоянии. Это всегда считается допустимым адресом, независимо от режима инициатора запроса. Значение должно оставаться действительным до тех пор, пока вызов не обновит состояние. Вызывающий объект должен выполнять синхронный ввод-вывод или ожидать события объекта файла или события, переданного в параметре Event, прежде чем разрешить этому адресу стать недействительным.

[in, out] StreamHeaders

Указывает список заголовков потоков. Предполагается, что этот адрес, а также адреса буферов данных были проверены на наличие соответствующего доступа. Клиенты режима ядра, отправляющие заголовки потоковой передачи, должны выделять заголовки из памяти NonPagedPool.

[in] Length

Указывает размер передаваемых объектов StreamHeaders .

[in] Flags

Задает различные флаги для ввода-вывода. Используемые значения см. в следующей таблице.

[in] RequestorMode

Указывает режим процессора для размещения в IRP, если его необходимо создать. Эта переменная также определяет, можно ли выполнить быстрый вызов ввода-вывода. Если режим инициатора запроса не является режимом ядра, но предыдущий режим — , то использовать быстрый ввод-вывод нельзя.

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

Функция KsStreamIo возвращает STATUS_SUCCESS в случае успешного выполнения, STATUS_PENDING, если действие находится в состоянии ожидания, или при неудачном выполнении возвращает ошибку ввода-вывода.

Комментарии

Следующие перечисленные значения используются для переменной CompletionInvocationFlags и имеют тип KSCOMPLETION_INVOCATION:

CompletionInvocationFlags Описание
KsInvokeOnSuccess Вызывает подпрограмму завершения при успешном выполнении.
KsInvokeOnError Вызывает подпрограмму завершения при ошибке.
KsInvokeOnCancel Вызывает подпрограмму завершения при отмене.

Для переменной Flags используются следующие определенные значения:

Flags Описание
KSSTREAM_READ Указывает, что требуется создать IOCTL_KS_STREAMREAD IRP. Это значение по умолчанию.
KSSTREAM_WRITE Указывает, что требуется создать IOCTL_KS_STREAMWRITE IRP.
KSSTREAM_PAGED_DATA Указывает, что данные доступны для страниц. Это значение по умолчанию, и его можно использовать в любое время.
KSSTREAM_NONPAGED_DATA Указывает, что данные являются непагированные и могут использоваться в качестве повышения производительности.
KSSTREAM_SYNCHRONOUS Указывает, что IRP является синхронным. Это означает, что если параметр Event передается, он не обрабатывается как событие диспетчера объектов и не ссылается или разыменовывается.

KSSTREAM_READ эквивалентен KSPROBE_STREAMREAD.

Аналогичным образом KSSTREAM_WRITE эквивалентна KSPROBE_STREAMWRITE.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ks.h (включая Ks.h)
Библиотека Ks.lib