wd2h
驱动牛犊
驱动牛犊
  • 注册日期2001-03-28
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望230点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:3850回复:8

请教:只能收到IRP_WRITE_OPERATION,无法捕获IRP_NOCACHE | IRP_PAGING_IO是怎么回事

楼主#
更多 发布于:2009-03-04 23:54
请教各位达人

参考tooflat大大的sfilter做文件过滤驱动,(在DDK库中sfilter工程上自己慢慢添加代码)

最初只是简单的判断扩展名然后在SfRead和SfWrite时进行加解密,都能成功捕获IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO,顺利的完成加解密

后续陆续加了判断PE哈希值,在文件尾加加密标识等功能,,但发现再也无法生成密文了,跟踪发现,SfWrite的加密代码根本没有运行,后来通过跟踪确认,确实是只收到了IRP_WRITE_OPERATION。使用filespy同步跟踪,也只能看到IRP_MJ_WRITE只有flags为0xA00,而没有发现0x43

我初时以为是加了文件尾写加密标识的原因(自己生成IRP写入),但把相关代码屏蔽掉,回到最初的简单判断,仍然无法收到0x43的IRP_MJ_WRITE

实在很奇怪,,,求达人解疑
wd2h
wd2h
驱动牛犊
驱动牛犊
  • 注册日期2001-03-28
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望230点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2009-03-05 14:58
木有银...
wd2h
wd2h
驱动牛犊
驱动牛犊
  • 注册日期2001-03-28
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望230点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2009-03-08 00:50
汗,是问题太简单了,还是都没有遇到过?
wd2h
210llzty
驱动牛犊
驱动牛犊
  • 注册日期2008-09-08
  • 最后登录2009-08-04
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-03-13 15:32
很明显是你的代码出问题了!    好好看看!
10624164
驱动牛犊
驱动牛犊
  • 注册日期2010-10-12
  • 最后登录2016-02-17
  • 粉丝1
  • 关注2
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2011-02-17 17:08
怎么解决的
我现在也遇到了类似的情况。就在写操作处理函数里,写了判断是否是记事本,然后判断有没有那3个标志,发现确实没有。怎么回事啊
10624164
驱动牛犊
驱动牛犊
  • 注册日期2010-10-12
  • 最后登录2016-02-17
  • 粉丝1
  • 关注2
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2011-02-18 14:44
请缓存也不行
我以为,是不是清缓存,才会导致 IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO。于是今天在IRP_MI_CREATE 中清了缓存,发现,还是得不到这3个标志。怎么回事。
我只做了一个简单的驱动架构,绑上一个盘,然后FASTIO都返回FALSE,IRP_MJ_WRITE里看是否有这3个标志,其他的例程都把IRP 往下传递
10624164
驱动牛犊
驱动牛犊
  • 注册日期2010-10-12
  • 最后登录2016-02-17
  • 粉丝1
  • 关注2
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2011-02-22 09:20
本地文件系统 和 代理文件系统
我先前是挂在代理文件系统,不是本地文件系统的盘上,确实得不到 IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO 只是0xA00,当我挂到本地文件系统上时,能得到IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO  是0x43
这是怎么回事呢?代理文件系统是自己实现的文件系统,已经mount 上了,从资源管理器能看到盘符,打开对其上文件进行操作,可为什么收不到0x43的标志?

有人吗?没人理会吗?
fatepro
驱动牛犊
驱动牛犊
  • 注册日期2011-05-12
  • 最后登录2011-09-07
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望681点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2011-05-14 22:35
路过
hiram-china
驱动牛犊
驱动牛犊
  • 注册日期2012-04-24
  • 最后登录2015-06-08
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2012-04-24 18:52
LZ 求告知你说的这种情况是怎么解决的啊  我的代码是按着 寒江的 sfilter 改的 也出现了 拦截不到 分页写这种操作。但是有 (irp->Flags & (IRP_DEFER_IO_COMPLETION|IRP_WRITE_OPERATION|IRP_NOCACHE) 这种类型的写,在这种类型的写操作中进行writePre  会使文件大小变为两倍的 加密标识头的大小。  真的很迷茫真心求指导啊 !!!!!!!!!!!!!
游客

返回顶部