Windows 会清除内存页吗?

2024-02-06

我知道 Windows 有一个选项可以清除页面文件当它关闭时。

当实际物理/虚拟内存进入或超出范围时,Windows 是否会对实际物理/虚拟内存执行任何特殊操作?

例如,假设我运行应用程序 A,它将可识别的字符串写入内存中的变量,然后关闭该应用程序。然后我运行应用程序 B。它分配一大块内存,保留未初始化的内容,并在其中搜索应用程序 A 写入的已知字符串。

应用程序 B 是否有可能获取应用程序 A 写入的字符串?或者 Windows 会在内存可用之前清理内存吗?


Windows does在将进程返回的已释放内存分配给其他进程之前,对其进行“清理”。有一个内核线程专门用于此任务。

The zero page thread runs at the lowest priority and is responsible for zeroing out free pages before moving them to the zeroed page list[1] https://archive.is/saC6h.


您不应该担心在分页文件中保留敏感数据,而应该首先担心继续将其保留在内存中(使用后)。关闭时清除页面文件不是默认行为。此外,系统故障转储将包含 RAM 中“纯文本”形式的任何敏感信息。

Windows 确实如此NOT“清理”内存,只要它分配给进程(显然)。相反,这是由程序(mer)来完成的。为此目的,人们可以使用SecureZeroMemory() http://msdn.microsoft.com/en-us/library/windows/desktop/aa366877%28v=vs.85%29.aspx功能。

该函数定义为RtlSecureZeroMemory()函数(参见WinBase.h)。实施RtlSecureZeroMemory()是内联提供的,可以在任何版本的 Windows 上使用(请参阅WinNT.h)

使用此函数代替ZeroMemory()当你想确保你的数据会被及时覆盖时,因为一些 C++ 编译器可以优化对ZeroMemory()完全删除它。

WCHAR szPassword[MAX_PATH];

/* Obtain the password */
if (GetPasswordFromUser(szPassword, MAX_PATH))
{    
    UsePassword(szPassword);
}

/* Before continuing, clear the password from memory */
SecureZeroMemory(szPassword, sizeof(szPassword));

不要忘记阅读这篇有趣的文章article https://devblogs.microsoft.com/oldnewthing/?p=30663作者:雷蒙德·陈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 会清除内存页吗? 的相关文章

随机推荐

  • 使用 wc_price 过滤器挂钩向产品价格添加其他货币

    根据我原来帖子的答案使用时遇到格式不正确的数值wc priceWooCommerce 挂钩 https stackoverflow com questions 66084833 a non well formed numeric value
  • 学C要多长时间? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Fallocate 和 ftruncate 之间有什么区别

    根据我的测试 他们都可以改变文件大小 为什么他们都可以将文件变大或变短 Fallocate 和 ftruncate 和有什么区别 ftruncate是一个简单的 单一用途的函数 根据 POSIX 文档 http pubs opengroup
  • 汇编程序中的寻址

    有件事我无法消化 我正在学习一些汇编程序 现在我正在学习寻址章节 我理解用于解除引用的括号的概念 但不知怎的 当我看到它的用法时 我就是无法理解它的要点 更准确地说 我的困惑是从这里开始的 mov al L1 在这里 我假设 L1 作为示例
  • 由于事务之间的读/写依赖关系,无法序列化访问

    我最终成功地重现了序列化问题这个问题 https stackoverflow com q 21706858 274677到 SSCCE 最短的独立完整示例 我正在使用jdbc and java标签 尽管我相信这不是 Java 或 JDBC
  • 如果查询中没有这样的键,如何关闭AWS连接

    我正在使用 AWS java SDK 将文件上传到 AWS 管理控制台的存储桶上 但是 如果当我第一次尝试访问该文件时在线上没有这样的文件 我的代码将捕获异常 NoSuchKey 然后我想关闭连接 问题是我没有任何引用来关闭该连接 因为异常
  • PySpark 中内存高效的笛卡尔连接

    我有一个大型字符串 id 数据集 可以放入 Spark 集群中单个节点的内存中 问题是它消耗了单个节点的大部分内存 这些 ID 的长度约为 30 个字符 例如 ids O2LWk4MAbcrOCWo3IVM0GInelSXfcG HbDck
  • 如何从 nuxtjs 服务器中间件获取 POST 数据?

    如何从 nuxtjs 服务器中间件获取 POST 数据 到目前为止 我已经成功地为 GET 做到了这一点 但对于 POST 来说 正文不存在 req body未定义 将其添加到nuxt config js serverMiddleware
  • IPython 笔记本到幻灯片:Reveal 未定义

    我正在使用 nbconvert 从我的笔记本制作一个 Reveal js 幻灯片 具体来说 我正在运行 ipython nbconvert to slides analysis ipynb 这将创建 analysis slides html
  • 发送带有数据库的应用程序

    如果您的应用程序需要数据库并且它带有内置数据 那么发布该应用程序的最佳方式是什么 我是不是该 预先创建 SQLite 数据库并将其包含在 apk 在应用程序中包含 SQL 命令并让它创建数据库并在首次使用时插入数据 我看到的缺点是 可能的
  • 如何将所有路由重定向到 gatsby 索引

    我正在尝试创建一个只有一页来处理所有路线的 Gatsby 项目 我有这样的索引页面 const App gt return
  • 如何将作业放入詹金斯的文件夹中?

    我正在尝试使用 jenkins DSL 脚本将作业放入文件夹中 现在我创建一个 listView 并将我正在使用的代码放入我的工作中 listView MyJobsList jobs map each name it key trim co
  • 如何将一个存储库的公共子文件夹与另一个存储库同步?

    我有一个软件项目foo在我公司托管的内部 GitLab 存储库上 并希望将其部分发布为开源项目baa在 GitHub 上 假设我将公共部分放在 public 文件夹中 foo public 以及文件夹 private 中的私有部分 foo
  • 在列表中查找因素的最有效方法是什么?

    我想要做什么 我需要创建一个函数 给定一个正整数列表 可以有重复的整数 计算所有三元组 列表中 其中第三个数字是第二个数字的倍数 第二个数字是第一个数字的倍数 同一个数字不能在一个三元组中使用两次 但可以被所有其他三元组使用 例如 3 6
  • Bugzilla 如何在本地 PC 上运行?

    我已在本地系统上安装了 bugzilla 版本 3 6 3 当我点击 开设新帐户 按钮 链接并输入有效电子邮件后 我收到以下错误 从 bugzilla daemon 发送邮件到 电子邮件受保护 cdn cgi l email protect
  • 我们是否仍然受制于 Visual Studio 2013 中的安装程序项目 .vdrpoj 或 WiX?

    有没有更好的Installer项目视觉工作室2013 https en wikipedia org wiki Microsoft Visual Studio Visual Studio 2013比安装项目或WiX https en wiki
  • 使用 grep 在多个文件中查找字符串

    我有一个文件夹 里面有子文件夹 所有子文件夹都有多种类型的文件 我想在里面搜索一个单词 css 文件 我正在使用 Windows 7 并且我有grep 我如何使用grep to 找到图案并打印 如果找到模式 请提供文件名 和路径 其实你不需
  • “主要”java.lang.NoClassDefFoundError:org / apache / http / HttpEntity

    我正在尝试在我的项目中使用 apache http 库 我在我的项目中导入了库https i stack imgur com Cm9ck jpg https i stack imgur com Cm9ck jpg 当我运行我的程序时 我收到
  • 在 Razor 组件 (Blazor) 中渲染 Razor 部分视图

    我最近发现了 Blazor 并且一直在尝试一些测试项目 以更好地评估如何将其包含在未来的项目中 由于具有 MVC 背景 我从一个 MVC 项目开始 并向其中添加了 Razor 组件 并将其嵌套在标准 MVC razor 页面中 反过来可能吗
  • Windows 会清除内存页吗?

    我知道 Windows 有一个选项可以清除页面文件当它关闭时 当实际物理 虚拟内存进入或超出范围时 Windows 是否会对实际物理 虚拟内存执行任何特殊操作 例如 假设我运行应用程序 A 它将可识别的字符串写入内存中的变量 然后关闭该应用