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

[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)

另请参阅

FSRTL_CHANGE_BACKING_TYPE