有没有办法将 DLL 的文件系统访问(仅读取)重定向到内存映射 file/directory?

Is there a way to redirect a DLL's filesystem access (only read) to a memory mapped file/directory?

首先:也许这是一个 XY 问题:我真正想要解决的是一个穷人的保护方案,以防止监视我们的源代码。我们在 C# 项目中使用 HALCON(一个图像处理库);问题是 HALCON 部分存储为纯源代码,只有在程序开始时告诉 DLL 源代码在哪里,DLL 才会 compiled/collected。我的意图是将源代码以加密形式保存在磁盘上,并 load/decrypt 在初始化 DLL 之前在程序开始时将其保存到内存的一部分。这个想法是拒绝通过文件系统访问源代码(插入 USB 记忆棒并复制)——我知道这是一种相当薄弱的保护形式,如果我遗漏了一些明显和更好的方法,请报告。

我一直在研究 RAM 磁盘,但这些磁盘无助于保护,因为应用程序是 24/7 运行的。基于内存的文件是理想的,因为它们在应用程序关闭时消失,并且应该或多或少对外界不可见,但我必须为 DLL 提供一个简单的 DOS 文件路径(例如 "C:/HALCON/ourproject")而不是文件stream/descriptor,所以问题仍然存在,是否可以(在 Windows!)用驻留在 RAM 中的临时部分覆盖每个进程的文件系统。

编辑: 我正在使用 HDevelop 接口,也就是说,HALCON 过程是通过 HDevProcedure 对象调用的,该对象为过程调用 HALCON 解释器。

您可以将程序转换为 C# 代码,而不是直接使用 HDevelop:文件 -> 导出或导出库项目:

您的代码将与项目的其余部分一起编译,但您应该知道反编译 C# 程序非常容易。