zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
阅读:2011回复:4

为什么驱动中按进程过滤时过滤不到IRP_MJ_READ?

楼主#
更多 发布于:2009-04-17 19:20
我的驱动程序以进程和文件名后缀作为过滤条件,当文件名和进程名都匹配时,为该文件流加StreamHandleContext,其中有是否进行加密解密的标志,然后在读写操作的处理例程中检查流上下文中是否有这个标记,如果有则解密,否则不解密。

但是,当我在测试的时候发现,程序没有过滤到应用程序从指定的流读取数据。但是在保存数据的时候可以捕获到。

比如,过滤条件设置为进程名:NotePad.exe,文件名后缀.c,当我们用记事本打开test.c文件的时候,可以看到记事本打开文件流的IRP_MJ_CREATE,程序在这个流上设置了流句柄上下文。但是并没有过滤到notepad.exe用这个流读取文件内容。而记事本仍然可以显示文件内容。

文件打开的方式是:在资源管理器中右键点击test.c文件,然后选择“用记事本打开”。

有没有人遇到这种情况,这是什么问题造成的呢?
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-04-17 21:06
又是一个没有考虑map情况下出现的问题
zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2009-04-18 13:30
我查了一些资料,也发现了是缓存的问题,如何才能把系统对某个文件的缓存清理掉?
panbing
驱动牛犊
驱动牛犊
  • 注册日期2009-02-10
  • 最后登录2011-10-17
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-04-19 10:50
http://bbs.driverdevelop.com/read.php?tid=115773&keyword=%BB%BA%B4%E6

上面的贴子可能会对你有用。

我在CREATE、READ、CLEANUP时清除缓存,好象还没发现有问题,

不知道我清缓存的时机有没有错,放在什么地方最合适呢?
wesley2005
驱动牛犊
驱动牛犊
  • 注册日期2007-06-16
  • 最后登录2011-03-29
  • 粉丝1
  • 关注0
  • 积分34分
  • 威望327点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-04-23 15:10
漏掉的原因主要有二。
首先一个,就是系统可能缓存了,所以,再次打开的时候,系统不必产生pagingIO。
其次,应用程序可能用map来做,这样,就不用产生fastIO和普通的IRP。

这样,用notepad打开时,可能根本不会产生任何形式的ReadIO。
游客

返回顶部