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

指定要对其执行 I/O 的文件对象。

[in, optional] Event

(可选)包含要用于 I/O 的事件。 如果未传递任何内容,则假定调用位于同步文件对象上,或者调用方正在等待文件对象的事件,或者它可以异步完成。 如果使用,并且未设置KSSTREAM_SYNCHRONOUS标志,则必须是对象管理器分配的事件。 如果调用方正在执行异步 I/O,则它必须等待文件对象的事件,或在此参数中传递事件并等待它。 如果未执行此作,则调用方无法知道 IoStatusBlock 何时由调用更新。

[in, optional] PortContext

(可选)包含完成端口的上下文信息。

[in, optional] CompletionRoutine

(可选)指向此 IRP 的完成例程。

[in, optional] CompletionContext

如果指定了 CompletionRoutine,则会在完成例程回调中提供上下文指针。

[in, optional] CompletionInvocationFlags

指定调用完成例程时指定的调用标志。 有关所使用的值,请参阅下表。

[out] IoStatusBlock

返回状态信息的位置。 无论请求者模式如何,始终假定这是有效的地址。 在调用更新状态之前,该值必须保持有效。 调用方必须执行同步 I/O,或者必须等待文件对象的事件或事件在允许此地址失效之前在事件参数中传递的事件。

[in, out] StreamHeaders

指定流标头的列表。 假定已探测此地址以及数据缓冲区的地址,以便进行适当的访问。 提交流式处理标头的内核模式客户端必须从 NonPagedPool 内存分配标头。

[in] Length

指定传递的 StreamHeaders 的大小。

[in] Flags

指定 I/O 的各种标志。 有关所使用的值,请参阅下表。

[in] RequestorMode

指示如果需要生成处理器模式,则表示要放置在 IRP 中的处理器模式。 此变量还确定是否可以执行快速 I/O 调用。 如果请求者模式不是内核模式,但以前的模式是,则无法使用快速 I/O。

返回值

KsStreamIo 函数在成功时返回STATUS_SUCCESS,如果作挂起,则返回STATUS_PENDING,或者返回 I/O 错误失败。

言论

以下枚举值用于 CompletionInvocationFlags 变量,类型为 KSCOMPLETION_INVOCATION:

CompletionInvocationFlags 描述
KsInvokeOnSuccess 在成功时调用完成例程。
KsInvokeOnError 调用错误时完成例程。
KsInvokeOnCancel 在取消时调用完成例程。

以下定义的值用于 标志 变量:

标志 描述
KSSTREAM_READ 指定要生成IOCTL_KS_STREAMREAD IRP。 这是默认值。
KSSTREAM_WRITE 指定要生成IOCTL_KS_STREAMWRITE IRP。
KSSTREAM_PAGED_DATA 指定数据可分页。 这是默认的,随时可以使用。
KSSTREAM_NONPAGED_DATA 指定数据未分页,可用作性能增强功能。
KSSTREAM_SYNCHRONOUS 指定 IRP 是同步的。 这意味着,如果传递 事件 参数,则它不会被视为对象管理器事件,也不会被引用或取消引用。

KSSTREAM_READ等效于KSPROBE_STREAMREAD。

同样,KSSTREAM_WRITE相当于KSPROBE_STREAMWRITE。

要求

要求 价值
目标平台 普遍
标头 ks.h (包括 Ks.h)
Ks.lib