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

Force user mode program to run under non paged memory

本文关键字:分页 内存 运行 用户 模式 程序      更新时间:2023-10-16

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

即使不执行任何I/O操作,也可以通过操作系统页面故障将数据写入磁盘。

有什么可以避免的吗?

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

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

mlockall(MCL_CURRENT | MCL_FUTURE);

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

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

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