阅读:2392回复:1
关于CcPurgeCacheSection清除缓冲的问题
假设有两个文件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.这只清除缓冲啊?头大的,请各位高手帮下忙! |
|
沙发#
发布于:2010-08-22 21:24
问题自己解决了,清除缓冲是必须的,但是读写过滤不能过滤缓冲读写,只能是IRP_NOCACHE、IRP_PAGING_IO、IRP_SYNCHRONOUS_PAGING_IO这三种,即非缓冲读写。害死在这个问题上了。
|
|