ccCoherencyFlushAndPurgeCache 函数 (ntifs.h)

CcCoherencyFlushAndPurgeCache 例程会刷新或刷新和清除缓存,以确保缓存一致性。

语法

void CcCoherencyFlushAndPurgeCache(
  [in]           PSECTION_OBJECT_POINTERS SectionObjectPointer,
  [in, optional] PLARGE_INTEGER           FileOffset,
  [in]           ULONG                    Length,
  [out]          PIO_STATUS_BLOCK         IoStatus,
  [in, optional] ULONG                    Flags
);

参数

[in] SectionObjectPointer

指向包含文件对象的 section 对象指针 的 SECTION_OBJECT_POINTERS 结构的指针。

[in, optional] FileOffset

指向变量的指针,该变量指定要刷新或刷新和清除的起始字节偏移量。

[in] Length

要刷新或刷新和清除的数据的长度(以字节为单位),从 FileOffset 开始。 如果将 NULL 指针传递给 FileOffset,则忽略此参数。

[out] IoStatus

指向调用方分配 的IO_STATUS_BLOCK 结构的指针,该结构接收最终完成状态和有关操作的信息。

[in, optional] Flags

指定如何执行操作的以下标志的位掩码:

含义
CC_FLUSH_AND_PURGE_NO_PURGE 刷新,但不清除缓存。 这对于读取一致性刷新很有用。
CC_FLUSH_AND_PURGE_GATHER_DIRTY_BITS 保留供系统使用;请勿使用。
CC_FLUSH_AND_PURGE_WRITEABLE_VIEWS_NOTSEEN 当缓存管理器外部没有文件映射时,调用方可以设置此标志,以便跳过剪裁 进程工作集的昂贵操作。

返回值

备注

尽可能使用 CcCoherencyFlushAndPurgeCache ,而不是显式刷新和清除调用序列,因为它会使用户映射视图失效,以防止数据损坏。 CcCoherencyFlushAndPurgeCache 确保缓存一致性;因此,没有仅通过此函数执行清除的选项。

在调用 CcCoherencyFlushAndPurgeCache 之前,必须以独占方式获取该文件。

可以使用 FileOffsetLength 参数刷新、刷新和清除文件中的任何字节范围。 或者,如果将 NULL 指针传递给 FileOffset 参数,则可以刷新或刷新和清除整个文件。

CcCoherencyFlushAndPurgeCache 的调用是同步 (阻止) 操作,而不是异步 (非阻塞) 操作。

IoStatus-Status> 值为 STATUS_CACHE_PAGE_LOCKED 表示页面无效失败。 请注意,即使在 Flags 参数中传递CC_FLUSH_AND_PURGE_NO_PURGE,页面无效也可能会失败。 请注意,STATUS_CACHE_PAGE_LOCKED是 成功 状态 (即,使用 NT_SUCCESS 宏对其进行测试将返回 TRUE) 。

要求

要求
最低受支持的客户端 Windows 7
目标平台 通用
标头 ntifs.h (包括 Ntifs.h、FltKernel.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

CcFlushCache

CcPurgeCacheSection