阅读:2460回复:3
读写文件的时机(磁盘过滤驱动)
各位大侠好,我有一个磁盘过滤驱动。我想用一个文件来记录每个磁盘的一些行为,这个文件还比较大。最初我想在磁盘的pnp的IRP_MN_START_DEVICE的时候我读文件,在
IRP_MN_REMOVE_DEVICE的时候写文件。发现这不可行,因为磁盘还没有起来,文件系统都还没有加载呢,打开文件的时候出现STATUS_OBJECT_PATH_NOT_FOUND错误。每次磁盘启动的时候我需要读文件,每次磁盘删除的时候我需要写文件。大家觉得我什么时候进行这些操作比较合适?谢谢大侠了! |
|
沙发#
发布于:2008-05-13 10:41
将这些事件记录到内存中,然后在一个系统线程 中保存这些记录到文件。 这只是一个解决办法,应该还有其他一些方法。
|
|
板凳#
发布于:2008-05-13 19:36
等5分钟比较好。
|
|
地板#
发布于:2010-03-29 13:00
回 1楼(yabeinut) 的帖子
在磁盘过滤驱动中不能写文件的,会引起写重入的,我知道你的意思,你说的是用一个单独的线程写,然后判断磁盘操作的线程ID,如果是写线程的ID就直接通过来达到写过滤。我做过实验了:我分别安装了两个filter:一个fs filter,一个disk filter。我用一个记事本写一个文件到C盘上,在fs filter驱动上获得的当前写数据的线程是记事本的进程ID,而在disk filter中的进程ID始终是4。我发现写数据的时候fs没有传给disk driver,而是写c:\$LogFile的时候才传irp给disk driver。所有在disk filter中不能得到读写的进程ID。所以在disk filter中根本得不到真正的进程(线程)的ID,因为通过文件系统后,下面的驱动是得不到真正的数据操作的进程ID的,中间被转换过了。如果是你直接打开disk驱动的设备,进行操作,这样是能得到进程ID的。我现在也在解决disk filter写文件的重入问题,但是我还没有找到解决的办法。希望大牛们提一个解决办法。 |
|