我写了个文件系统过滤驱动,想要在文件被修改前将文件的内容读出复制到其他地方,我拦截了IRP_MJ_WRITE,然后用ZwCreateFile,ZwWriteFile将拦截的内容备份为新文件.但是在频繁写文件的时候总是死机,表现为ZwWriteFile调用无返回。我该如何解决?很急...
全文
回复(7) 2009-10-27 15:56 来自版块 - 文件系统(过滤)驱动程序开发
表情
CyberQiQi我也遇到了和楼主类似的问题。我写了个scsi驱动模拟了一个分区,我拦截了SCSIOP_WRITE,然后用ZwCreateFile,ZwWriteFile将拦截的内容备份为新文件.我在频繁往模拟的分区写文件,拦截了SCSIOP_WRITE后,往另外的实体硬盘分区写文件,也同样出现死...(2009-11-03 15:40)
qianjunhua把你的 死锁的堆栈贴出来!文件系统里面涉及到的同步太多了,简单的推理不可能解决你的这个问题!因为你的问题 仅仅是一个现象 连起码的,样例都没有! 比如 你是在 那种情况 做备份的?NOCACHE?PAGEIO? 这个irp 是同步的?还是异步? 你备份使用的文件打开的时候 是同...(2009-10-30 11:29)
liangyufei我是把所有IRP—WRITE的时候的内容都写在一个文件里,ZwCreateFile只运行了一次,后面全是ZwWriteFile,我试了不管是在IRP—WRITE的时候直接写,还是在线程里面写,都会有问题。当然,首先我已经保证了IRP—WRITE不是由于我的ZwWriteFile导...(2009-10-30 09:35)
qianjunhua貌似和我的软件里面的实时备份的功能类似啊! 恩在线程里面做搞不好的肯定是要死锁的!不过也比较容易分析。不过我的在thread里面 实时备份的 死锁是出现在create 或者 setfileinformation里面 好像!具体的忘记了!因为后来把这个种在thread里面备份的方式...(2009-10-29 23:34)
michaelgzThen you need to use WinDbg breaking into the system and check all locks held by each thread and all pending IRPs to figure out where is the...(2009-10-29 02:06)
liangyufei我创建了一个专门用来读写的线程,该线程运行在PASSIVE_LEVEL上,拦截了IRP_MJ_WRITE后把内容放在内存里,在读写线程中把内存中的内容写入文件,同样会有此现象。两个线程用event同步。请各位高手分析下是何原因导致。(2009-10-28 11:47)
michaelgzYour design is flawed. Don't think it can be solved easily. One reason is that ZwCreateFile and ZwWriteFile can only be called at PASSI...(2009-10-28 00:55)

返回顶部