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_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_CACHE_PAGE_LOCKED指示页面无效。 请注意,即使 标志 参数中传递CC_FLUSH_AND_PURGE_NO_PURGE,页面失效也会失败。 请注意,STATUS_CACHE_PAGE_LOCKED是 成功 状态(也就是说,使用 NT_SUCCESS 宏对其进行测试将返回 TRUE)。

要求

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

另请参阅

CcFlushCache

CcPurgeCacheSection