IoCreateStreamFileObjectEx2 函数 (ntifs.h)

IoCreateStreamFileObjectEx2 例程使用目标设备对象的创建选项创建新的流文件对象。

语法

NTSTATUS IoCreateStreamFileObjectEx2(
  [in]            PIO_CREATE_STREAM_FILE_OPTIONS CreateOptions,
  [in, optional]  PFILE_OBJECT                   FileObject,
  [in, optional]  PDEVICE_OBJECT                 DeviceObject,
  [out]           PFILE_OBJECT                   *StreamFileObject,
  [out, optional] PHANDLE                        FileHandle
);

参数

[in] CreateOptions

指向包含新流文件对象的创建选项的 IO_CREATE_STREAM_FILE_OPTIONS 结构。

[in, optional] FileObject

指向与新流文件相关的文件对象的指针。 此参数是可选的,可以是 NULL。

[in, optional] DeviceObject

指向要打开流文件的设备的设备对象的指针。 如果调用方指定 FileObject的非 NULL 值,则忽略 DeviceObject 的值。 否则,调用方必须为 DeviceObject指定非 NULL 值。

[out] StreamFileObject

指向设备对象指针的指针,用于接收流文件对象。

[out, optional] FileHandle

指向输出中流的文件句柄的指针。 此参数是可选的,可以是 NULL。

返回值

IoCreateStreamFileObjectEx2 返回指向新创建的流文件对象的指针。

言论

文件系统调用 IoCreateStreamFileObjectEx2 创建新的流文件对象。 流文件对象 与普通文件对象相同,只是设置了 FO_STREAM_FILE 文件对象标志。

流文件对象通常用于表示文件系统装载的卷的内部流。 此 虚拟卷文件 允许文件系统查看、更改和缓存卷的磁盘上结构,就像它是一个普通文件一样。 在这种情况下,调用 IoCreateStreamFileObjectEx2 中的 DeviceObject 参数 指定卷的卷设备对象 (VDO)。

流文件对象还可用于表示用于访问文件的元数据的备用数据流,例如扩展属性或安全描述符。 在这种情况下,调用 IoCreateStreamFileObjectEx2 中的 FileObject 参数 指定文件的现有文件对象。 新建的流文件对象允许文件系统查看、更改和缓存文件的元数据,就像它是普通文件一样。

不再需要流文件对象时,调用方必须通过调用 ObDereferenceObject来递减其引用计数。 当流文件对象的引用计数达到零时,会将 IRP_MJ_CLOSE 请求发送到卷的文件系统驱动程序堆栈。

文件系统筛选器驱动程序编写器应注意,IoCreateStreamFileObjectEx2 会导致 IRP_MJ_CLEANUP 请求发送到卷的文件系统驱动程序堆栈。 由于文件系统通常将流文件对象创建为除 IRP_MJ_CREATE以外的作的副作用,因此筛选器驱动程序很难可靠地检测流文件对象的创建。 因此,筛选器驱动程序应会收到以前未见的文件对象的IRP_MJ_CLEANUPIRP_MJ_CLOSE 请求。

如果池分配失败,IoCreateStreamFileObjectEx2 引发 STATUS_INSUFFICIENT_RESOURCES 异常。

要求

要求 价值
最低支持的客户端 Windows 8
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 被动

另请参阅

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateStreamFileObject

IoCreateStreamFileObjectEx

IoCreateStreamFileObjectLite

ObDereferenceObject