IoCreateStreamFileObjectEx 例程创建新的流文件对象。
语法
PFILE_OBJECT IoCreateStreamFileObjectEx(
[in, optional] PFILE_OBJECT FileObject,
[in, optional] PDEVICE_OBJECT DeviceObject,
[out, optional] PHANDLE FileHandle
);
参数
[in, optional] FileObject
指向与新流文件相关的文件对象的指针。 此参数是可选的,可以 NULL。
[in, optional] DeviceObject
指向要打开流文件的设备的设备对象的指针。 如果调用方指定 FileObject的非NULL 值,则忽略 deviceObject 的值。 否则,调用方必须为 deviceObject 指定非NULL值。
[out, optional] FileHandle
指向输出中流的文件句柄的指针。 此参数是可选的,可以 NULL。
返回值
IoCreateStreamFileObjectEx 返回指向新创建的流文件对象的指针。
言论
文件系统调用 IoCreateStreamFileObjectEx 创建新的流文件对象。 流文件对象 与普通文件对象相同,只不过设置了FO_STREAM_FILE文件对象标志。
流文件对象通常用于表示文件系统装载的卷的内部流。 此 虚拟卷文件 允许文件系统查看、更改和缓存卷的磁盘上结构,就像它是一个普通文件一样。 在这种情况下,调用 IoCreateStreamFileObjectEx DeviceObject 参数 指定卷的卷设备对象(VDO)。
流文件对象还可用于表示用于访问文件的元数据的备用数据流,例如扩展属性或安全描述符。 在这种情况下,调用 IoCreateStreamFileObjectEx FileObject 参数 指定文件的现有文件对象。 新建的流文件对象允许文件系统查看、更改和缓存文件的元数据,就像它是普通文件一样。
不再需要流文件对象时,调用方必须通过调用 ObDereferenceObject来递减其引用计数。 当流文件对象的引用计数达到零时,会将IRP_MJ_CLOSE请求发送到卷的文件系统驱动程序堆栈。
文件系统筛选器驱动程序编写器应注意,IoCreateStreamFileObjectEx 会导致IRP_MJ_CLEANUP请求发送到卷的文件系统驱动程序堆栈。 由于文件系统通常将流文件对象创建为除IRP_MJ_CREATE以外的作的副作用,因此筛选器驱动程序很难可靠地检测流文件对象创建。 因此,筛选器驱动程序应收到以前未见的文件对象的IRP_MJ_CLEANUP和IRP_MJ_CLOSE请求。
如果池分配失败,IoCreateStreamFileObjectEx 引发STATUS_INSUFFICIENT_RESOURCES异常。
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | Windows XP |
| 目标平台 | 普遍 |
| 标头 | ntifs.h (include Ntifs.h) |
| 库 | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | 被动 |