hiram-china
驱动牛犊
驱动牛犊
  • 注册日期2012-04-24
  • 最后登录2015-06-08
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3895回复:4

文件过滤 IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO|IRP_NOCACHE 类型 写的问题

楼主#
更多 发布于:2012-04-27 08:12
        各位 驱动开发的前辈们!  在下新手有几个问题 困扰好几天啦 都得不到解决 ,还请诸位大侠指点 指点。
一、用寒江独钓的sfilter 代码做基础对txt 做透明加解密,但是 一直 过滤不到irp->Flags & (IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO|IRP_NOCACHE  这种类型的写IRP,写完文件后,文件大小有增加,但是内容都是wwwwwwwwwwww 原来在txt 里写了多少内容就会有多少个w,但是用寒江的crypt_file的例子生成过滤驱动,然后加载,写一个文件,然后用我改的驱动去打开 内容是可以看的。    
二、对于那个PAGING类型的写请求  平时运行的时候 根本拦截不到,但是如果单步调试,一步一步走 就会运行得到,而且在writepre 中缓冲区的 内容也是正确的,但是打开还是会看到 wwwwwwww。
三、可是如过在 那个判断if(irpsp->MajorFunction == IRP_MJ_WRITE &&(irp->Flags (IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO|IRP_NOCACHE)))这里 加断点的话,就又运行不进去啦,只有F10 一步一步走 才能进去。
四、在清缓存的时候 if (pFileObject->SectionObjectPointer)
   {
        IO_STATUS_BLOCK ioStatus;
        if(!CcIsFileCached(pFileObject))// 寒江上的例子里没有这一句 运行的也很正常,但是我要是没有这一句的话 会在IRP_MJ_CLOSE的post 函数中调用下面那个函数死机(不是蓝屏就是直接各种不响应)
        CcFlushCache(pFileObject->SectionObjectPointer, NULL, 0, &ioStatus);
        if (pFileObject->SectionObjectPointer->ImageSectionObject)
        {
            MmFlushImageSection(pFileObject->SectionObjectPointer,MmFlushForWrite); // MmFlushForDelete
        }
        CcPurgeCacheSection(pFileObject->SectionObjectPointer, NULL, 0, FALSE);
   }
感觉这些个问题 都可能是在一个点 上面纠缠着 , 还请 各位前辈 多多给点儿指点啊!!!!   !!
catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2012-04-27 17:29
一、过滤不到是代码问题 自己对照寒江一行行检查和调试了 没得好办法了  
二、第二个你看到的是写缓存,但是打开看到的是W。因为打开的是读取。那么你读取的过程没处理好,或者说跟写处理没配合好。还是要检查代码,自己调试

三四的情况应该四不可能出现的。基本都是自己改了其他位置 但是没预料到代码运行还有些意外情况 而影响到其他地方。还是需要调试。
其实说了半天都是废话,但是你只讲你的现象基本上很难能帮得了你。
hiram-china
驱动牛犊
驱动牛犊
  • 注册日期2012-04-24
  • 最后登录2015-06-08
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-04-27 20:00
回 catface 的帖子
catface:一、过滤不到是代码问题 自己对照寒江一行行检查和调试了 没得好办法了  
二、第二个你看到的是写缓存,但是打开看到的是W。因为打开的是读取。那么你读取的过程没处理好,或者说跟写处理没配合好。还是要检查代码,自己调试

三四的情况应该四不可能出现的。基本都是 .. (2012-04-27 17:29)

恩 很感谢你!!     我的代码只有那个加密链表不是按着寒江做的,没有用那四个头文件,用的是RTL_GENERIC_TABLE来做加密链表的 节点里面用了一个Pvoid 的指针来存储file->Fscontext 的内容。其他的地方 都和寒江的代码都和寒江是一样的。              会不会是 必须要用那四个头文件啊??  二、 读应该没问题吧 因为我用自己的驱动 去读 本来就存在的 那些文件 是可以读出来的。 还有把加密文件从虚拟机里托出来 就只能看到那个加密标识文件头  这应该还是说 没有写进去吧,但是既然单步调试的时候 运行到了 writepre 为什么还写不进去啊?
再次 感谢!!!
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地板#
发布于:2012-04-28 11:35
第一,fastio要禁掉,特别是读写
第二,注意 cache问题
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
hiram-china
驱动牛犊
驱动牛犊
  • 注册日期2012-04-24
  • 最后登录2015-06-08
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2012-05-05 14:20
回 znsoft 的帖子
znsoft:第一,fastio要禁掉,特别是读写
第二,注意 cache问题 (2012-04-28 11:35)

恩 多谢管理大大 的回答。是cache的问题。不过还没有完全解决,正在努力。
游客

返回顶部