Minifilter驱动程序和系统缓存。无法写入物理磁盘

时间:2014-11-07 07:42:39

标签: caching filesystems minifilter

首先,这不是关于内存映射文件。

我从ms minifilter sample" swapbuffer"实现了minifilter驱动程序。 并且在传入IRP_MJ_WRITE时成功交换了一些特定数据。 但是当系统缓存被清空(即重启)时,所有交换的缓冲区都没有应用于该文件。 我在缓冲区交换后立即检查并完全交换。 但是在我清空系统缓存后,它就消失了。 这怎么可能? Minifilter驱动程序无法将任何内容更改为缓冲区以写入磁盘?

我不确切知道,但我猜这是关于Windows缓存和内存管理器。但是当它的缓存为空时,它是否必须应用交换的内容? 我要读这本书" NT文件系统内部"找出来,但这里的任何人都可以告诉我原因。

1 个答案:

答案 0 :(得分:0)

现在我可以肯定了。我没有改变缓冲区内容的原因是我的愚蠢加密算法加上我对缓存管理器的无知。复制文件时,写入操作发生两次。到物理磁盘,到缓存。我不知道哪一个先来。 :p我的加密算法只是简单地进行逐位操作。因此,如果它执行了两次,它只是解密的纯文本。那就是问题所在。 所以我改变了代码来加密irp,写入物理磁盘,IRP_NOCACHE,它就像我的意思一样。

你甚至无法想象我如何因为这种愚蠢而恨自己。 在Osr上发表了许多文章。