【发布时间】:2026-02-24 12:15:02
【问题描述】:
让我解释一下这个问题。应用程序 X(不是我的)想要从硬盘读取/写入文件 F。我希望应用程序/库 M 充当两者之间的缓冲区,因此每次写入都将被缓冲,并且每次读取都将被重定向到 M。这怎么可能?我想我需要以某种方式将我的 C# 方法与 Windows 文件 I/O 事件挂钩。
一些注意事项:
- 我无法更改应用程序 X
- 我无法更改文件 F 内容的路径
我认为有可能实现类似于 RAM-Disks 的东西,但只是针对一个文件。
【问题讨论】:
-
C# 中的 I/O 操作通过 .NET 方法执行,最终委托给 Windows 内核。由于这些都不是开源的,因此您不能不更改默认行为。唯一的选择是从应用程序 X 引用您的应用程序并通过应用程序 M 执行其 I/O 操作。
-
你的问题对 SO 来说有点太宽泛了。如果您确实发现需要挂断电话 - 请查看 easyhook.codeplex.com
-
操作系统将已经缓冲 IO 访问,大多数现代硬盘也会这样做。如果您想拦截所有文件 IO 并实际更改内容,那么如果操作系统允许您这样做,那将是一个主要安全漏洞。您几乎需要编写自己的操作系统才能做到这一点。
-
你也可以看看Dokan code.google.com/p/dokan
-
@Servy - 编写file system minifilter driver 可以让您通过拦截 IRP 数据包来做到这一点。这是非托管的内核模式软件,但可以做到。