【发布时间】:2014-11-07 07:42:38
【问题描述】:
首先,这与内存映射文件无关。
我从 ms minifilter 示例“swapbuffer”实现了 minifilter 驱动程序。 并在传入 IRP_MJ_WRITE 时成功交换了一些特定数据。 但是当系统缓存被清空(即重新启动)时,所有交换的缓冲区都没有应用于文件。 我在缓冲区交换后立即检查,它被完美交换了。 但是在我清空系统缓存后,它就消失了。 这怎么可能? Minifilter 驱动程序无法更改任何内容以写入磁盘的缓冲区?
我不确切知道,但我可以猜测这是关于 Windows 缓存和内存管理器的。但是当它的缓存为空时,它必须应用交换的内容吗? 我要阅读“NT文件系统内部”一书来找出答案,但这里的任何人都可以告诉我原因。
【问题讨论】:
-
我正在阅读《NT 文件系统内部》一书。这本书非常适合我。现在我可以隐约理解,这是与系统缓存相关的。我没有用 inf 文件安装我的微过滤器。我通过服务管理器安装了它,并在关闭我的电脑之前手动停止了 Minifilter。所以我的过滤器在系统缓存刷新时没有做任何事情。这本书我没看完,所以这可能不对。当我可以确定这一点时,我会发布 bakc。
-
是的,我的猜测似乎是正确的。当 I/O 管理器正在处理 irp_mj_write irp 时,I/O 管理器首先在系统缓存中寻找文件流,而不是直接进入物理磁盘,除了一些特殊情况。我想我在系统缓存刷新之前停止了我的微过滤器。所以它没有交换任何东西。
标签: caching filesystems minifilter