Caching 微型过滤器驱动程序和系统缓存。无法写入物理磁盘

Caching 微型过滤器驱动程序和系统缓存。无法写入物理磁盘,caching,filesystems,minifilter,Caching,Filesystems,Minifilter,首先,这与内存映射文件无关 我从ms Minipilter示例swapbuffer实现了Minipilter驱动程序。 并在传入IRP_MJ_WRITE时成功交换了一些特定数据。 但是,当系统缓存清空时,即重新启动时,所有交换的缓冲区均未应用于文件。 我检查后,缓冲区的权利交换,它是完美的交换。 但在我清空系统缓存后,它就消失了。 这怎么可能? 微筛选器驱动程序无法更改缓冲区中的任何内容以写入磁盘 我不太清楚,但我可以猜这是关于windows缓存和内存管理器的。但它必须在缓存为空时应用交换的内容

首先,这与内存映射文件无关

我从ms Minipilter示例swapbuffer实现了Minipilter驱动程序。 并在传入IRP_MJ_WRITE时成功交换了一些特定数据。 但是,当系统缓存清空时,即重新启动时,所有交换的缓冲区均未应用于文件。 我检查后,缓冲区的权利交换,它是完美的交换。 但在我清空系统缓存后,它就消失了。 这怎么可能? 微筛选器驱动程序无法更改缓冲区中的任何内容以写入磁盘

我不太清楚,但我可以猜这是关于windows缓存和内存管理器的。但它必须在缓存为空时应用交换的内容吗?
我将阅读《NT文件系统内部》这本书来找出原因,但是这里的任何人都可以告诉我原因。

现在我可以肯定地告诉你。我未能更改缓冲区内容的原因是我愚蠢的加密算法加上我对缓存管理器的无知。复制文件时,写入操作会发生两次。到物理磁盘和缓存。我还不知道哪一个先来p我的加密算法只是简单地进行逐位运算。因此,如果它这样做两次,它只是解密的纯文本。这就是问题所在。 所以我修改了代码,在写入物理磁盘的irp上加密,irp_NOCACHE,它按照我的意思工作

你甚至无法想象我是多么恨自己的愚蠢。
Osr上有成吨的文章。

我正在读《NT文件系统内部》一书。这本书非常适合我。现在我可以模糊地理解这是与系统缓存相关的。我没有用inf文件安装我的迷你过滤器。我通过服务管理器安装了它,并在关闭电脑之前手动停止了微型过滤器。因此,当系统缓存刷新时,我的过滤器没有做任何事情。我没有读完这本书,所以这可能不对。当我能确定的时候,我会把bakc发出去。是的,我的猜测似乎是对的。当I/O管理器处理irp_mj_write irp时,I/O管理器首先在系统缓存中查找文件流,而不是直接查找物理磁盘,某些特殊情况除外。我想我在系统缓存刷新之前停止了我的迷你过滤器。所以它没有留下任何交换。