abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:985回复:6

如何在一个过滤系统中得到文件的position,(讨论一下)

楼主#
更多 发布于:2007-09-25 10:28
我先说说经验:
  我用的是filemon的框架, 用FilemonQueryFile函数构造Irp去请求文件信息。
对于standard信息,可以正常请求到。
但对于position信息却无法得到。
现在猜是FILE_SYNCHRONOUS_IO_NONALERT,标记的原因
在一文件系统中得到其指针的position
是在Create中加上此标记还是要 自己用ZwCreateFile打开再请求?
驱网无线,快乐无限
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-09-25 10:38
这个其实就是如何在read时得到offset的问题。(好像蛮难的)
我在Create中相关函数的完成例程根据FileObject
自己设offset然后自己请求,可以得到。 但是请求系统的移动好像不行。
其相关参数,大多是0.(word中有时指针正常一次)
驱网无线,快乐无限
zhsh200
驱动牛犊
驱动牛犊
  • 注册日期2005-01-27
  • 最后登录2013-07-18
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望212点
  • 贡献值1点
  • 好评度54点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-25 12:57
这个问题还没有解决啊
帮你顶一下
yaolixing
驱动小牛
驱动小牛
  • 注册日期2006-06-27
  • 最后登录2010-07-15
  • 粉丝1
  • 关注0
  • 积分991分
  • 威望135点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-02 00:18
在读写例程中,IrpSp-> Parameters.ReadByteOffset.QuadPart依赖于上一次读成功的 Irp->IoStatus.Information的大小的累加。当然此次的irp->IoStatus.Information==0;
在读写完成里程中Irp->IoStatus.Information代表此次成功读写的数据量。FileObject-> CurrentByteOffset.QuadPart维护着当前读写到文件的位置,也就是说==IrpSp-> Parameters.ReadByteOffset.QuadPart+ Irp->IoStatus.Information.
太晚了,明天又要迟到了,简直是一定的,郁闷!
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-05 14:32
如果你的fileobject是同步的话 这个offset里面的值肯定是正确的,但是如果不是同步的话 就不保证了,应该io manager不知道保存在什么地方,同步的时候是文件系统来更新这个值的!fat系统的代码里有。
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-11-05 15:45
回 3楼(yaolixing)的帖子
你的意思我也想过,但是我怕出现如下问题.
你这个是用原始的0+后续读的长度,来标记offset
但是,如果这个读不是顺序性的,就会出现在至命的错误.
驱网无线,快乐无限
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2007-11-08 12:29
同步的读写的时候:
  if (((IrpSp->MajorFunction == IRP_MJ_READ) ||
         (IrpSp->MajorFunction == IRP_MJ_WRITE)) &&
        (IrpSp->FileObject != NULL) &&
        FlagOn(IrpSp->FileObject->Flags, FO_SYNCHRONOUS_IO) &&
        NT_SUCCESS(Irp->IoStatus.Status)) {

        IrpSp->FileObject->CurrentByteOffset.QuadPart =
            IrpSp->FileObject->CurrentByteOffset.QuadPart +
            Irp->IoStatus.Information;
    }
游客

返回顶部