【问题标题】:Minifilter Driver and System cache. Unable to write to physical diskMinifilter 驱动程序和系统缓存。无法写入物理磁盘
【发布时间】: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


【解决方案1】:

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

你甚至无法想象我是如何因为这种愚蠢而憎恨自己的。 Osr 上已有大量文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-08
    • 2017-01-27
    • 2013-10-05
    • 2016-08-23
    • 2013-07-28
    • 2012-12-28
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多