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

Omr*_*ian -2 c++ winapi operating-system memory-management process

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

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

有没有办法避免它?

cdh*_*wie 5

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

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

mlockall(MCL_CURRENT | MCL_FUTURE);
Run Code Online (Sandbox Code Playgroud)

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