我想托管一个虚拟驱动器并拦截 I/O,或者拦截对硬盘驱动器上某些文件夹的 I/O 调用,然后对该调用执行任意操作,例如将文件写入第二个位置。例如,如果 Notepad.exe 将文件写入 C:\Data\test.txt - 我想访问该文件名和文件数据。同样,当任何用户尝试读取 C:\Data\test.txt 或尝试获取 C:\Data 的目录列表时,我想运行任意代码。
理想情况下,我希望有一个处理程序,用于处理文件何时:创建、更新、删除或打开 - 以及何时有人列出目录(从命令行或从 Shell)。
我可以使用 FileSystemWatcher 完成写入部分 - 但我无法拦截磁盘“读取”。所以,我接下来研究了 MS Detours 和 EasyHook。这不会真正起作用,因为我需要监视计算机上的每个进程并在所有进程上连接到 OpenFile。我不想使用 Shell 扩展,因为这种行为也需要在命令行中存在。因此,剩下的就是编写文件系统 MiniFilter 驱动程序 - 或者用 C++ 编写我自己的可安装文件系统。
我可以在 C++ 中使用其中的一部分——尽管驱动程序的内容有点超出我的想象,但最终大部分其余代码都应该在 C# 中,理想情况下。
是否有一些直接的方法来拦截特定文件夹或虚拟驱动器的 I/O?如果答案是 EasyHook 或 MiniFilter,有人有样品吗?尤其是 EasyHook 仅包含 2000 年代后期的样本,此后 API 发生了变化。谢谢!