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,或者必须等待文件对象的事件或事件在 Event 参数中传递的事件,然后才允许此地址无效。
[in, out] StreamHeaders
指定流标头的列表。 假定已探测此地址以及数据缓冲区的地址,以便进行适当的访问。 提交流式处理标头的内核模式客户端必须分配 NonPagedPool 内存中的标头。
[in] Length
指定传递的 StreamHeaders 的大小。
[in] Flags
指定 I/O 的各种标志。 有关使用的值,请参阅下表。
[in] RequestorMode
指示在需要生成 IRP 时放置在 IRP 中的处理器模式。 此变量还确定是否可以执行快速 I/O 调用。 如果请求者模式不是内核模式,但以前的模式为 ,则无法使用快速 I/O。
返回值
如果成功, KsStreamIo 函数将返回STATUS_SUCCESS;如果操作处于挂起状态,则返回STATUS_PENDING;如果操作不成功,则返回 I/O 错误。
注解
以下枚举值用于 CompletionInvocationFlags 变量,类型为 KSCOMPLETION_INVOCATION:
CompletionInvocationFlags | 说明 |
---|---|
KsInvokeOnSuccess | 成功时调用完成例程。 |
KsInvokeOnError | 在出错时调用完成例程。 |
KsInvokeOnCancel | 在取消时调用完成例程。 |
以下定义的值用于 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) |
Library | Ks.lib |