FsRtlChangeBackingFileObject 函数 (ntifs.h)
FsRtlChangeBackingFileObject 例程将当前文件对象替换为新的文件对象。
语法
NTSTATUS FsRtlChangeBackingFileObject(
PFILE_OBJECT CurrentFileObject,
PFILE_OBJECT NewFileObject,
FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
ULONG Flags
);
参数
CurrentFileObject
[in, 可选] 当前文件对象。 如果 CurrentFileObjectNULL,则操作系统的当前文件对象设置为 NewFileObject。 如果为非 NULL,则仅当 OS 的当前支持文件对象等于此值时,支持文件对象才会更改为 NewFileObject。 如果此文件对象不属于流,操作将失败。
NewFileObject
[in] OS 将在内部引用和存储的新文件对象。
ChangeBackingType
Flags
[in] 保留以供将来使用。
返回值
如果操作成功,FsRtlChangeBackingFileObject 例程将返回STATUS_SUCCESS。 否则,FsRtlChangeBackingFileObject 返回相应的错误代码。下表包含 FsRtlChangeBackingFileObject 可能会返回的错误代码。
返回代码 | 描述 |
---|---|
STATUS_INVALID_PARAMETER_2 | 更改操作失败,因为 NewFileObject 指定的文件对象不表示与 CurrentFileObject 相同的流。 |
STATUS_INVALID_PARAMETER_3 | 更改操作失败,因为调用方在 ChangeBackingType中指定了无效的后备类型。 |
STATUS_INVALID_PARAMETER_4 | 更改操作失败,因为调用方在 标志中指定了无效值。 |
STATUS_NOT_SUPPORTED | 更改操作失败,因为调用方以不允许后续交换文件对象的方式获取文件对象。 例如,如果调用方通过调用 CcGetFileObjectFromSectionPtrs获取了文件对象,则交换文件对象不安全。 |
言论
FsRtlChangeBackingFileObject 例程更改以下其中一项的文件对象:
流内存管理器的映像控制区域之一
流的内存管理器的数据控制区域
流的缓存管理器的共享缓存映射
FsRtlChangeBackingFileObject 例程不是同步的。 它处理文件对象的更改请求,并立即返回。 缓存管理器和内存管理器同步文件对象的更改,在完成与旧文件对象关联的所有不完整操作之前,不会释放旧文件对象。 FsRtlChangeBackingFileObject 中STATUS_SUCCESS的返回状态并不意味着操作系统已更改文件对象。
但是,FsRtlChangeBackingFileObject 成功运行后,操作系统会将所有将来的操作与新文件对象相关联。
若要更改多个后备类型的文件对象,调用方必须多次调用 FsRtlChangeBackingFileObject 一次,以便每个后备类型更改一次。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows Vista 开始,FsRtlChangeBackingFileObject 例程可用。 |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | PowerIrpDDis(wdm) |