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