newkey
驱动小牛
驱动小牛
  • 注册日期2002-10-03
  • 最后登录2013-10-13
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望392点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
阅读:1416回复:5

help:虚拟文件系统 处理记事本写问题

楼主#
更多 发布于:2008-01-28 16:29
写了一个虚拟文件系统,直接将IRP_MJ_XX 转成ZwXXFile对某个指定目录进行操作

查询、创建、读初步看没有问题,对写字板板写也没有问题

但对记事本写总是出现问题,问题现象如下
不过在写字板什么位置(最前面、最后面、中间)写数据,发生错位

如:原来内容为111111,在后面追加222,操作后变成 111111 111
跟踪过程,发现在写过程这个句柄上中多了一个IRP_MJ_READ操作,导致FileObject的curoffset指向了文件末尾,在写的时候就从末尾开始写全部内容,后面又紧跟一个EndofFile截断文件

不知道是那里处理不对,望指教

其中那个读操作是什么引发的,看调用栈,起到是CcMapAndCopy函数,而查看WRK代码,没发现是什么入口来的???

还有,用Filespy跟踪过程,发现有2此IRP_MJ_WRITE,但进到虚拟文件系统内部只有一次,why

www.xDrv.com
newkey
驱动小牛
驱动小牛
  • 注册日期2002-10-03
  • 最后登录2013-10-13
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望392点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-29 09:07
"虚拟文件系统" ? File System Filter Driver?
---File System

"直接将IRP_MJ_XX 转成ZwXXFile" - You can stuck your machine easily by doing this.
---不是为了商用,只是用于学习FS,这样操作简单

多一次 IRP_MJ_READ 从栈看,是因为在处理记事本写时,
Cache管理调用CcCopyWrite->CcMapAndCopy->MmCheckCachedPageState->MmAccessFault->MiDispatchFault->IoPageRead->IopPageReadInternal->IopfCallDriver ...


即在处理Write时有可能会由Cache管理器发起READ,不知道文件系统怎么处理这部分操作,我大致看了FastFat,没看到对这部分的特殊处理???
www.xDrv.com
游客

返回顶部