阅读:1416回复:5
help:虚拟文件系统 处理记事本写问题
写了一个虚拟文件系统,直接将IRP_MJ_XX 转成ZwXXFile对某个指定目录进行操作
查询、创建、读初步看没有问题,对写字板板写也没有问题 但对记事本写总是出现问题,问题现象如下 不过在写字板什么位置(最前面、最后面、中间)写数据,发生错位 如:原来内容为111111,在后面追加222,操作后变成 111111 111 跟踪过程,发现在写过程这个句柄上中多了一个IRP_MJ_READ操作,导致FileObject的curoffset指向了文件末尾,在写的时候就从末尾开始写全部内容,后面又紧跟一个EndofFile截断文件 不知道是那里处理不对,望指教 其中那个读操作是什么引发的,看调用栈,起到是CcMapAndCopy函数,而查看WRK代码,没发现是什么入口来的??? 还有,用Filespy跟踪过程,发现有2此IRP_MJ_WRITE,但进到虚拟文件系统内部只有一次,why |
|
|
沙发#
发布于: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,没看到对这部分的特殊处理??? |
|
|