强制用户模式程序在非分页内存下运行
Force user mode program to run under non paged memory
我需要编写一个程序(最好是C#或Java等高级语言,但可以是C/C++),在任何情况下都不能将数据写入磁盘。
即使不执行任何I/O操作,也可以通过操作系统页面故障将数据写入磁盘。
有什么可以避免的吗?
在Windows系统上,VirtualLock()
可用于锁定各个内存区域。我不知道有任何选项可以在整个过程中锁定所有内存页。在存储敏感数据之前,您必须立即在内存分配中使用此功能
在POSIX系统上,这可以通过在进程中使用不应该交换的mlock()
函数族来实现。例如,这将防止交换当前映射的内存页面以及将来映射的任何页面:
mlockall(MCL_CURRENT | MCL_FUTURE);
在某些系统上,锁定内存页是一种特权操作。您必须检查特定系统的详细信息。
到目前为止,最简单的解决方案是将所有内容(包括休眠文件)存储在加密磁盘上。从技术上讲,所有的比特仍然在磁盘上,但如果没有密钥,它们就毫无意义。
请注意,这不会向授权用户隐藏应用程序中的位。这不是DRM方案。但请注意,一个坚定的用户无论如何都可以撤消任何类型的内存页保护。
相关文章:
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 确保内存映射页位于内存中
- 堆分配对于大型块中的分页是否更有效?
- 如何在 QML 中显示来自 QTextDocument 的分页文本?
- 动态表中的 SQLite 分页
- 如果我剩下大量RAM,会发生记忆分页
- 如何在C++应用程序中支持输出分页
- 使用写入函数对 int 表进行分页
- list.h list_del() 给出内核分页错误
- 时钟分页替换算法
- 提升::几何 R*树和分页/延迟加载
- 非分页内存指针
- 如何设置QSqlQueryModel的Qt::Vertical headerData在进行分页时增加数字
- 强制用户模式程序在非分页内存下运行
- 什么会导致分页池增加
- 数组内存分配-分页
- 如何使用std::vector等动态数据结构并防止分页
- 如何防止分页在QTextDocument块或框架
- 使用控制台进行分页