zy860326
驱动牛犊
驱动牛犊
  • 注册日期2009-09-02
  • 最后登录2010-09-07
  • 粉丝2
  • 关注2
  • 积分48分
  • 威望371点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1672回复:3

再次求助内存映射读操作的捕获

楼主#
更多 发布于:2009-11-09 11:41

对txt等内存映射方式的读操作,应该使用什么方法才能捕获呢?

我观察到在有的时候,读取txt文件前可能会询问一下IRP_MJ_QUERY_INFORMATION的FileAllInformation,但并不是每次都这么做。
而且对txt等文件的读操作,使用在Create时保存文件名的方式无法获得正确的文件名,在fileObject中的FileName域也无法获取到正确的文件名。

上次发贴求助时,有兄弟说需要清缓存,但我觉得这样不是得每读一次就清一次缓存?而且我程序需要过滤掉那些非人为的读操作,这样每次建立缓存的时候可能会出现种种问题吧?


各位高手帮帮忙啊!
zy860326
驱动牛犊
驱动牛犊
  • 注册日期2009-09-02
  • 最后登录2010-09-07
  • 粉丝2
  • 关注2
  • 积分48分
  • 威望371点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-11-09 15:56
这么快就沉了。。。大伙请帮忙出出点子啊!
feng_zhibing
驱动牛犊
驱动牛犊
  • 注册日期2009-12-11
  • 最后登录2009-12-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-12-11 14:55
等待中
dasanlang
驱动牛犊
驱动牛犊
  • 注册日期2009-10-27
  • 最后登录2010-03-01
  • 粉丝1
  • 关注1
  • 积分15分
  • 威望141点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-12-15 17:48
我也正在为类似事情头疼,在这里说些体会共勉。

1. "读取txt文件前可能会询问一下IRP_MJ_QUERY_INFORMATION的FileAllInformation,但并不是每次都这么做".  
     这个没注意,所以不清楚。

2. "使用在Create时保存文件名的方式无法获得正确的文件名,在fileObject中的FileName域也无法获取到正确的文件名。"  
    不清楚你是采用的什么架构, sfilter or minifilter? 但是有一点可以确定的就是,不管是什么架构,文件名是可以一定可以正确获得的。关键是时机. 对于sfilter,楚狂人的文章中有介绍,必须是在Create的完成例程被调用之后再去获取,因为只有这时候文件才算是真正打开。如果是minifilter,似乎不太会出现这样的情况。实在不行,你贴点代码出来,这样大牛们才好分析。

3. "有兄弟说需要清缓存,但我觉得这样不是得每读一次就清一次缓存?而且我程序需要过滤掉那些非人为的读操作,这样每次建立缓存的时候可能会出现种种问题吧?"
    要清缓存。所谓文件映射,个人体会主要有两点,一是采用pageIO,二是会缓存文件。我们这里主要关注缓存。在有缓存存在的情况下,文件是从缓存中读取,这样就不会有IRP_MJ_READ。这样就算是人为的读操作,你都没法过滤。至于非人为的读操作,范围太大,我无能为力,建议看看per-file context,或者对目标进程过滤。
游客

返回顶部