阅读:3983回复:8
请教:只能收到IRP_WRITE_OPERATION,无法捕获IRP_NOCACHE | IRP_PAGING_IO是怎么回事
请教各位达人
参考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 实在很奇怪,,,求达人解疑 |
|
|
沙发#
发布于:2009-03-05 14:58
木有银...
|
|
|
板凳#
发布于:2009-03-08 00:50
汗,是问题太简单了,还是都没有遇到过?
|
|
|
地板#
发布于:2009-03-13 15:32
很明显是你的代码出问题了! 好好看看!
|
|
地下室#
发布于:2011-02-17 17:08
怎么解决的
我现在也遇到了类似的情况。就在写操作处理函数里,写了判断是否是记事本,然后判断有没有那3个标志,发现确实没有。怎么回事啊 |
|
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 往下传递 |
|
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的标志? 有人吗?没人理会吗? |
|
7楼#
发布于:2011-05-14 22:35
路过
|
|
8楼#
发布于:2012-04-24 18:52
LZ 求告知你说的这种情况是怎么解决的啊 我的代码是按着 寒江的 sfilter 改的 也出现了 拦截不到 分页写这种操作。但是有 (irp->Flags & (IRP_DEFER_IO_COMPLETION|IRP_WRITE_OPERATION|IRP_NOCACHE) 这种类型的写,在这种类型的写操作中进行writePre 会使文件大小变为两倍的 加密标识头的大小。 真的很迷茫真心求指导啊 !!!!!!!!!!!!!
|
|