MiniFilter上复制粘贴和文件读取的区别
Distinction between copy paste and file read on MiniFilter
我打算制作一个 MiniFilter 做一些文件加密,在文件上添加一些元数据。
我想我明白我需要做什么,在我的 MiniFilter 中,使文件以加密形式存储,但系统可以毫无问题地读取。
如果应用程序要求读取文件,我需要查询加密部分,解密并将其发送回系统。
如果我尝试复制文件,我需要复制整个文件,包括元数据和加密的负载。
但我想我可能对元数据有疑问:因为我无法找到一种方法来判断我得到的 IRP_MJ_READ 是来自试图读取文件的应用程序还是来自复制粘贴请求,我将永远无法读取元数据并复制它们。
在 IRP_MJ_READ 或 IRP_MJ_CREATE 中是否有一些特定于复制粘贴操作的信息?
无论如何,您的任务都不会轻松或微不足道。在 Windows 中制作加密文件系统过滤器很难。
- 首先我会给你一些提示和指示。您可以做的最好的事情是解析 OSR NTFSD 列表以获取关于此的帖子和线程。就这些过滤器而言,它是一座金矿。
- 查看 Microsoft 的 swapbuffers 样本。它们展示了如何用您自己的路径替换 Read/Write I/O 路径中的数据。在这种情况下,正如您描述的那样,在写入时加密并在读取时解密
- 对于初学者,仅过滤设置了 IRP_NO_CACHE 标志的 read/writes。确保所有 Read/Write 都是卷扇区大小的倍数。查看有关此标志的更多信息 here
- 使用与卷扇区大小一致的块密码,所有流行的密码都应该如此。参见 CNG
从那里开始探索。仅修改它应该非常简单。
确保您将使用 VM 和快照,并尝试仅监控特定文件并且 encrypt/decrypt 仅监控该文件,因为您需要多次尝试才能成功。
Is there some informations, in the IRP_MJ_READ or the IRP_MJ_CREATE,
that is specific from a copy paste action ?
None 随便吧。内核对此视而不见。即使是 Copy/Paste 本身,如果您考虑一下,最终也会导致 explorer.exe 打开文件,从源文件读取,然后写入使用系统调用到目标文件。 OS 是为了确保系统调用工作并完成它们的工作,它不知道也不需要知道数据或元数据的读取来自您 copy/pasting,右键单击属性explorer.exe 或者谁知道呢,您可以使用 Total Commander 并从那里进行复制粘贴,而这个复制可以完全不同地实现,或者使用 xcopy 或 robocopy。你需要在内核中以更抽象的方式思考。
祝你好运。
我打算制作一个 MiniFilter 做一些文件加密,在文件上添加一些元数据。
我想我明白我需要做什么,在我的 MiniFilter 中,使文件以加密形式存储,但系统可以毫无问题地读取。
如果应用程序要求读取文件,我需要查询加密部分,解密并将其发送回系统。
如果我尝试复制文件,我需要复制整个文件,包括元数据和加密的负载。
但我想我可能对元数据有疑问:因为我无法找到一种方法来判断我得到的 IRP_MJ_READ 是来自试图读取文件的应用程序还是来自复制粘贴请求,我将永远无法读取元数据并复制它们。
在 IRP_MJ_READ 或 IRP_MJ_CREATE 中是否有一些特定于复制粘贴操作的信息?
无论如何,您的任务都不会轻松或微不足道。在 Windows 中制作加密文件系统过滤器很难。
- 首先我会给你一些提示和指示。您可以做的最好的事情是解析 OSR NTFSD 列表以获取关于此的帖子和线程。就这些过滤器而言,它是一座金矿。
- 查看 Microsoft 的 swapbuffers 样本。它们展示了如何用您自己的路径替换 Read/Write I/O 路径中的数据。在这种情况下,正如您描述的那样,在写入时加密并在读取时解密
- 对于初学者,仅过滤设置了 IRP_NO_CACHE 标志的 read/writes。确保所有 Read/Write 都是卷扇区大小的倍数。查看有关此标志的更多信息 here
- 使用与卷扇区大小一致的块密码,所有流行的密码都应该如此。参见 CNG
从那里开始探索。仅修改它应该非常简单。 确保您将使用 VM 和快照,并尝试仅监控特定文件并且 encrypt/decrypt 仅监控该文件,因为您需要多次尝试才能成功。
Is there some informations, in the IRP_MJ_READ or the IRP_MJ_CREATE, that is specific from a copy paste action ?
None 随便吧。内核对此视而不见。即使是 Copy/Paste 本身,如果您考虑一下,最终也会导致 explorer.exe 打开文件,从源文件读取,然后写入使用系统调用到目标文件。 OS 是为了确保系统调用工作并完成它们的工作,它不知道也不需要知道数据或元数据的读取来自您 copy/pasting,右键单击属性explorer.exe 或者谁知道呢,您可以使用 Total Commander 并从那里进行复制粘贴,而这个复制可以完全不同地实现,或者使用 xcopy 或 robocopy。你需要在内核中以更抽象的方式思考。
祝你好运。