This MSND article说 SecureZeroMemory()
适用于在内存中存储了一段时间的敏感数据应该确保在不再需要时尽快覆盖的情况。 this SO question的答案解释为什么这会有所作为。
现在使用 SecureZeroMemory()
来初始化每个内存块有什么意义吗?例如,在一个项目中,我看到如下代码:
ICONINFO ii;
::SecureZeroMemory(&ii, sizeof(ICONINFO));
if (::GetIconInfo(hIcon, &ii))
{
//do stuff, then
//release bitmaps
if(ii.hbmMask)
::DeleteObject(ii.hbmMask);
if(ii.hbmColor)
::DeleteObject(ii.hbmColor);
}
为什么在这里使用SecureZeroMemory()
而不是ZeroMemory()
、memset()
或值初始化?我的意思是如果编译器认为初始化是不必要的并且想要优化它——我为什么要强制执行它?有什么理由在这里使用 SecureZeroMemory()
吗?
最佳答案
SecureZeroMemory 从不被编译器优化掉。如果您需要担心要清理的内存内容,那么这一点很重要,比如它是否包含非常敏感的用户信息,例如银行软件、密码等。显然,如果您不需要担心这些事情,您可以使用任何其他方式清理内存缓冲区,或者如果没有必要则根本不清理。
关于c++ - 当安全不是问题时,有什么理由使用 SecureZeroMemory() 而不是 memset() 或 ZeroMemory() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012602/