zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
阅读:2397回复:3

读写文件的时机(磁盘过滤驱动)

楼主#
更多 发布于:2008-05-04 10:57
各位大侠好,我有一个磁盘过滤驱动。我想用一个文件来记录每个磁盘的一些行为,这个文件还比较大。最初我想在磁盘的pnp的IRP_MN_START_DEVICE的时候我读文件,在
IRP_MN_REMOVE_DEVICE的时候写文件。发现这不可行,因为磁盘还没有起来,文件系统都还没有加载呢,打开文件的时候出现STATUS_OBJECT_PATH_NOT_FOUND错误。每次磁盘启动的时候我需要读文件,每次磁盘删除的时候我需要写文件。大家觉得我什么时候进行这些操作比较合适?谢谢大侠了!
yabeinut
驱动牛犊
驱动牛犊
  • 注册日期2006-11-13
  • 最后登录2009-05-28
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-13 10:41
将这些事件记录到内存中,然后在一个系统线程 中保存这些记录到文件。  这只是一个解决办法,应该还有其他一些方法。
lovehhy
驱动小牛
驱动小牛
  • 注册日期2007-09-17
  • 最后登录2010-09-17
  • 粉丝0
  • 关注0
  • 积分1028分
  • 威望244点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-05-13 19:36
等5分钟比较好。
weixiaoling888
驱动牛犊
驱动牛犊
  • 注册日期2009-09-27
  • 最后登录2012-12-18
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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写文件的重入问题,但是我还没有找到解决的办法。希望大牛们提一个解决办法。
游客

返回顶部