强制用户模式程序在非分页内存下 运行

Force user mode program to run under non paged memory

我需要编写一个程序(最好使用高级语言,如 C# 或 Java,但也可以是 C/C++),在任何情况下都不得将其数据写入磁盘.

即使不执行任何 I/O 操作,数据也可以通过 OS 页面错误写入磁盘。

有什么方法可以避免吗?

在 Windows 系统上,VirtualLock() 可用于锁定内存的各个区域。我不知道有任何选项可以锁定整个过程的所有内存页面。在将敏感数据存储到其中之前,您必须立即在内存分配上使用此函数。

在 POSIX 系统上,这可以通过在不应交换的进程中使用 mlock() 系列函数来实现。例如,这将防止交换当前映射的内存页面以及将来映射的任何页面:

mlockall(MCL_CURRENT | MCL_FUTURE);

在某些系统上,锁定内存页是一项特权操作。您必须检查特定系统的详细信息。

到目前为止,最简单的解决方案是将所有内容(包括休眠文件)存储在加密磁盘上。从技术上讲,所有位仍会在磁盘上,但如果没有密钥,它们将毫无意义。

请注意,这不会向授权用户隐藏您的应用程序中的位。这不是 DRM 方案。但请注意,坚定的用户无论如何都可以撤消任何类型的内存页面保护。