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

时间:2015-11-16 21:14:13

标签: c++ winapi memory-management process operating-system

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

即使没有实现任何I / O操作,也可以通过操作系统页面错误将数据写入磁盘。

无论如何都可以避免它吗?

2 个答案:

答案 0 :(得分:4)

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

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

mlockall(MCL_CURRENT | MCL_FUTURE);

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

答案 1 :(得分:0)

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

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