阅读:2457回复:4
在文件系统中,如何完全禁止cache 和 read-ahead
请问:
在文件系统中,如何完全禁止cache 和 read-ahead? 另外,在explorer 中 ,当你把鼠标指到某个文件时,我在驱动中会得到 IRP_MJ_READ , 如何禁用这一功能? 多谢. |
|
沙发#
发布于:2010-07-13 17:45
read ahead是文件系统做的,不好禁吧,也没必要禁,不过自己管理缓存有可能可行(个人观点未验证)。EXPLORER的那些操作是正常的打开读取,比如:MP3,DOC,INI……然后显示一些相关信息给你,正常的打开读取不需要禁用,一定要禁那可以在FILTER中截IRP_MJ_READ在PRE中直接返回一个适当的错误值或者在应用层钩,不过这样做会有一个问题:无法区分开哪些打开读取是这种状态下的,哪些又不是(比如复制、粘贴等操作)
|
|
板凳#
发布于:2010-07-14 11:26
非常感谢.
我正在做一个文件系统,实现一个虚拟盘(类似于NETDRIVE). 现在的情况是只要打开一个目录(在EXPLORER中).如果这个目录中有文件,explorer就会去读这个文件的内容(read-ahead),文件系统收到IRP_MJ_READ. 怎么禁止这种行为? 我的意思是一定要用户自已在文件上点复制然后粘贴,才开始读文件的内容. 其它情况都不能读. |
|
地板#
发布于:2010-07-14 17:29
ReadAhead是CM的功能,不属FS。
如果你开发的是真正的FS,而不是FSFD,你当然可以不用Cache。但性能上,没有Cache的FS会有几个人用? 你想做的其实是改变Explorer使用FS的流程,这不应该在FS中实现。主要的一个问题是你为什么要改? |
|
地下室#
发布于:2010-07-15 13:51
是的。楼上的说的比较准确。那些行为是正常的exploer的文件访问行为。你做的netdriver是不是因为这些行为导致慢?因为一打开目录,所有文件的内容都读取一下。有一个办法就是本地cache 一下数据。
|
|
|