Why does WriteFile call ReadFile and how do I avoid it?问题的一种可能解决方案。是使用CcPreparePinWrite和PIN_CALLER_TRACKS_DIRTY_DATA
写入文件。基本上这样做是为了让缓存管理器将文件部分映射到内存而不必从磁盘读取它,因为假定整个部分被覆盖。
PIN_CALLER_TRACKS_DIRTY_DATA标志通常用于文件系统正在管理写入但未读取的日志文件的情况。由于现有的文件数据将被覆盖而不被读取,因此缓存管理器可能会返回零页而不是从磁盘中查找实际的文件数据页。
理论上这一切都很棒。虽然在实践中实现起来似乎相当复杂。特别是因为这些是无法从用户模式应用程序调用的内核模式函数。
使用常规WriteFile
API有没有办法实现此行为?或者是否有任何好的资源可以进一步解释如何使用Cache Manager Routines?