jiangshu_jsf
驱动牛犊
驱动牛犊
  • 注册日期2008-05-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望92点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2313回复:1

关于CcPurgeCacheSection清除缓冲的问题

楼主#
更多 发布于:2010-08-22 00:00
假设有两个文件A和B,A已经通过内存映射方式将所有内容保存在内存中,B尚未打开,但B打开时不是内存映射方式,现在有一个minifilter驱动过滤这两文件,minifilter驱动能捕获B的读请求,但是不能捕获A打的读请求,因为读取A是直接从内存中读到的,现在为了能读到A,就用CcPurgeCacheSection的方法清除A的缓冲,A的缓冲清除后,会重新从硬盘读取,这时,minifilter驱动能捕获A的读请求,这方法确实有效,但现在存在一个问题,无法分辨哪个文件是以内存映射方式打开的,如果两个文件打开时,都用CcPurgeCacheSection,A的硬盘数据不变,但B的硬盘数据改变,有什么办法区分内存映射的和非内存映射打开的文件吗?或者提供一种其他的解决这个问题的方法
说明:当以非内存映射打开一个文件时,用CcPurgeCacheSection清除文件缓冲,会导致这文件被改写(硬盘上的数据改写),但是看帮助中说明The CcPurgeCacheSection routine purges all or a portion of a cached file from the system cache.这只清除缓冲啊?头大的,请各位高手帮下忙!

jiangshu_jsf
驱动牛犊
驱动牛犊
  • 注册日期2008-05-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望92点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-08-22 21:24
问题自己解决了,清除缓冲是必须的,但是读写过滤不能过滤缓冲读写,只能是IRP_NOCACHE、IRP_PAGING_IO、IRP_SYNCHRONOUS_PAGING_IO这三种,即非缓冲读写。害死在这个问题上了。
游客

返回顶部