Windows是否清除内存页面?

我知道Windows有closures页面文件的选项。

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

例如,假设我运行应用程序A,它将可识别的string写入内存中的variables,然后closures应用程序。 然后我运行应用程序B.它分配一大块内存,保持内容未初始化,然后search应用程序A写入的已知string。

应用程序B是否有可能拿起由应用程序A编写的string? 还是在Windows使内存可用之前擦除内存?

Solutions Collecting From Web of "Windows是否清除内存页面?"

在分配给其他进程之前,Windows “清理”由进程返回的已释放内存。 有一个专门为这个任务的内核线程。

零页面线程以最低优先级运行,负责在将空闲页面移动到零页面列表之前清空空闲页面[1]

零页面线程


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

只要分配给进程(显然),Windows不会“擦除”内存。 而是由程序员来做。 为了这个目的,可以使用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的这篇有趣的文章