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 更改操作失败,因为调用方在 标志中指定了无效值。
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)

另请参阅

FSRTL_CHANGE_BACKING_TYPE