【问题标题】:Distinction between copy paste and file read on MiniFilterMiniFilter 上复制粘贴和文件读取的区别
【发布时间】:2018-06-12 22:58:32
【问题描述】:

我打算做一个 MiniFilter 做一些文件加密,在文件上添加一些元数据。

我想我知道我需要在 MiniFilter 中做什么,以使文件以加密形式存储,但系统可以毫无问题地读取。

如果应用程序要求读取文件,我需要查询加密部分,解密并将其发送回系统。

如果我尝试复制文件,我需要复制整个文件,包括元数据和加密的有效负载。

但我认为我的元数据可能有问题:因为我无法知道我得到的 IRP_MJ_READ 是来自试图读取文件的应用程序还是来自复制粘贴请求,所以我永远无法读取元数据并复制它们。

在 IRP_MJ_READ 或 IRP_MJ_CREATE 中是否有一些特定于复制粘贴操作的信息?

【问题讨论】:

标签: windows filesystems minifilter


【解决方案1】:

无论如何,您的任务都不会轻松或微不足道。在 Windows 中制作加密文件系统过滤器很难。

  1. 首先我会给你一些提示和建议。您能做的最好的事情是解析 OSR NTFSD 列表以获取有关此的帖子和线程。就这类过滤器而言,这是一座金矿。
  2. 查看来自 Microsoft 的 swapbuffers 示例。它们展示了如何用自己的方式替换读/写 I/O 路径中的数据。在这种情况下,正如您所描述的那样,您的方案在写入时加密并在读取时解密
  3. 对于初学者来说,只过滤设置了 IRP_NO_CACHE 标志的读/写。确保所有读/写都是卷扇区大小的倍数。查看有关此标志的更多信息here
  4. 使用与卷扇区大小一致的分组密码,所有流行的密码都应该这样做。见CNG

从那里开始探索。只修改这个应该很简单。 确保您将使用虚拟机和快照,并尝试仅监控特定文件并仅加密/解密该文件,因为您需要多次尝试才能成功。

是否有一些信息,在 IRP_MJ_READ 或 IRP_MJ_CREATE 中, 这是特定于复制粘贴操作的?

什么都没有。内核对此视而不见。如果您考虑一下,即使是在一天结束时复制/粘贴本身也会导致 explorer.exe 打开文件,从源文件读取,并使用系统调用写入目标文件.操作系统可以确保系统调用正常工作并完成其工作,它不知道也不需要知道数据或元数据的读取来自您复制/粘贴,右键单击 explorer.exe 上的属性 或者谁知道,您可能会使用 Total Commander 并从那里复制粘贴,这可以实现完全不同的复制或使用 xcopyrobocopy 。您需要在内核中以更抽象的方式思考。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多