是否有一种方法或程序可以让我仅禁用某个程序的页面文件?
我不想全局禁用它,也不想每次禁用它时都重新启动计算机
答案1
虽然这是可能的让程序无法分页,我不知道有什么方便最终用户的“操作系统配置选项”方式。
不过,在代码级别开发应用程序时,可以按照此 StackOverflow 问题中所述进行操作如何防止一个程序/进程的分页?,尽管这是针对 Linux 的,但 Windows 也有一个非常类似的机制,例如在如何使用 WinAPI 锁定内存中的页面?。
以下是相关内容WinAPI 参考文档。
还有其他方法,例如这个微软开发者博客:
如果你真的想锁定内存,您可以授予您的进程 SeLockMemoryPrivilege 权限,并使用 AWE 函数来分配不可分页内存。请注意,这通常被认为是在分页系统上执行的反社会行为。AWE 函数是为希望手动管理分页的大型数据库程序设计的。
附注:如果您担心的是安全原因,同一篇文章提到了这一点:
如果您拥有相对较小的敏感数据块,我见过的推荐解决方案是使用 CryptProtectData 和 CryptUnprotectData。这些函数使用的加密密钥是在启动时伪随机生成的,并保存在内核模式下。(因此,没有人可以 ReadProcessMemory 它们,并且它们不会被用户模式崩溃转储捕获。)事实上,这是 Windows 2003 Server 中许多组件用来减少页面文件和休眠文件中敏感信息的暴露。
但是,正如您所见,这些几乎都是代码级别的。尽管理论上可以编写第三方实用程序应用程序,允许您通过注入代码来为您想要的任何用户程序启用这些功能,但我还是不知道有任何此类工具公开发布。
如果你确实需要防止任何分页,最实用的方法是禁用页面文件 (指导)。
但请记住,这是系统中非常有用的一部分,变得越来越好,并通过使操作系统响应更快来全面改善您的体验,并且通常没有必要禁用它。
欲了解更多详情,请查看如果我有大量 RAM,我是否应该禁用交换文件或者是否应该将其移动到虚拟 RAM 驱动器?。
答案2
这不可能。
应用程序本身不会也无法访问页面文件。出于取证目的,可以读取页面文件,但这很不寻常。严格禁止并强制写入页面文件。
页面文件是一种系统资源,仅供系统内存管理器使用。系统内存管理器将自行决定将不常使用的内存页面写入页面文件。这不受外部控制,甚至进程本身也无法阻止。