阅读:4042回复:4
文件过滤 IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO|IRP_NOCACHE 类型 写的问题
各位 驱动开发的前辈们! 在下新手有几个问题 困扰好几天啦 都得不到解决 ,还请诸位大侠指点 指点。
一、用寒江独钓的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); } 感觉这些个问题 都可能是在一个点 上面纠缠着 , 还请 各位前辈 多多给点儿指点啊!!!! !! |
|
沙发#
发布于:2012-04-27 17:29
一、过滤不到是代码问题 自己对照寒江一行行检查和调试了 没得好办法了
二、第二个你看到的是写缓存,但是打开看到的是W。因为打开的是读取。那么你读取的过程没处理好,或者说跟写处理没配合好。还是要检查代码,自己调试 三四的情况应该四不可能出现的。基本都是自己改了其他位置 但是没预料到代码运行还有些意外情况 而影响到其他地方。还是需要调试。 其实说了半天都是废话,但是你只讲你的现象基本上很难能帮得了你。 |
|
板凳#
发布于:2012-04-27 20:00
回 catface 的帖子
catface:一、过滤不到是代码问题 自己对照寒江一行行检查和调试了 没得好办法了 恩 很感谢你!! 我的代码只有那个加密链表不是按着寒江做的,没有用那四个头文件,用的是RTL_GENERIC_TABLE来做加密链表的 节点里面用了一个Pvoid 的指针来存储file->Fscontext 的内容。其他的地方 都和寒江的代码都和寒江是一样的。 会不会是 必须要用那四个头文件啊?? 二、 读应该没问题吧 因为我用自己的驱动 去读 本来就存在的 那些文件 是可以读出来的。 还有把加密文件从虚拟机里托出来 就只能看到那个加密标识文件头 这应该还是说 没有写进去吧,但是既然单步调试的时候 运行到了 writepre 为什么还写不进去啊? 再次 感谢!!! |
|
地板#
发布于:2012-04-28 11:35
第一,fastio要禁掉,特别是读写
第二,注意 cache问题 |
|
|
地下室#
发布于:2012-05-05 14:20
回 znsoft 的帖子
znsoft:第一,fastio要禁掉,特别是读写 恩 多谢管理大大 的回答。是cache的问题。不过还没有完全解决,正在努力。 |
|