Windows是否清除内存页面?

时间:2013-08-22 16:02:17

标签: windows memory

我知道Windows可以选择在关闭时清除页面文件

当Windows进入或超出范围时,Windows是否对实际的物理/虚拟内存做了什么特别的事情?

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

应用程序B是否有可能获取应用程序A写入的字符串?或者Windows在使内存可用之前擦除它?

1 个答案:

答案 0 :(得分:9)

Windows 执行“清理”进程返回的已释放内存,然后再将其分配给其他进程。只有专门针对此任务的内核线程。

  

零页线程以最低优先级运行,负责将空闲页面清零,然后再将其移至归零页面列表 [1]

 zero-page thread


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

只要将内存分配给进程(显然),Windows就会“清理”内存。而是由程序(mer)来做。出于这个目的,可以使用SecureZeroMemory()函数。

  

此功能定义为 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));

不要忘记阅读Raymond Chen的这篇有趣的 article