能力值:
( LV2,RANK:10 )
|
-
-
2 楼
继续等。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
直接修改了还得通知缓存管理器,CcSetFileSizes,找找fastfat的代码参考下吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢你的回答,我之前有使用CcSetFileSize来通知,可是还是不行。
我还尝试在修改validdatalength时获取资源锁,结果导致程序死锁。
看了NT 文件系统内幕,书上说validdatalength的修改需要通过顶层设备,
我又尝试使用SetFileInformation来修改 Validdatalength,这样可以修改成功,但是它好像把currentoffset也修改,虽然我用dt fileobject 的 currentoffset没有变,但是当NOCACHE 写文件的时候,它只保存了最后一页数据,也就是说NOCACHE 我只收到了offset=0x2000,writelength=0x3D7的写请求,前面的0x2000的数据写请求没有接收到。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我的流程是这样的,
PostCreate的时候判断是否是加密文件,是的话写上加密头,然后刷缓存.在PreWrite的地方对数据进行加密,写文件的偏移量加上一个加密头大小,另外在PreSetInformation处过滤,如果是机密进程那么ValidSize EndofFile AllocateSize Position等全部加上一个加密头大小,在PostQueryInformation的地方减掉一个加密头大小
因为OFFICE系列写文件的时候没有设置ENDOF,导致文件被截断,所以我在CACHE写文件的时候fltsetinformation设置了ENDOF,又因为WINDOWS SERVER 2008 下写文件被validdatalength截断,我尝试使用ftlsetinformation设置VALIDDATALENGTH 失败,所以直接修改FCB->Validdatalength。
大概思路是这样的.
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
问一下,如果实在IRP_MJ_CLEANUP中来对修改的机密文件进行加密,那么怎么判断文件是否被修改过,是不是判断最后修改的时间是否相同啊?如果是怎么获取上一次的修改时间
|
|
|