sha*_*oth 11 c++ language-agnostic windows initialization visual-c++
这篇MSND文章说这SecureZeroMemory()对于存储在内存中一段时间的敏感数据应该在不再需要时尽快被覆盖的情况很有用.这个问题的答案解释了为什么这会产生影响.
现在有没有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);
}
Run Code Online (Sandbox Code Playgroud)
为什么SecureZeroMemory()在这里使用而不是ZeroMemory(),memset()或初始值?我的意思是如果编译器决定初始化是不必要的并且想要优化它 - 为什么我会强制执行它?有什么理由在SecureZeroMemory()这里使用吗?
Dmi*_*try 13
SecureZeroMemory 永远不会被编译器优化掉.如果您需要担心要清理的内存内容,例如它是否包含非常敏感的用户信息,例如银行软件,密码等,这一点很重要.显然,如果您不需要担心这些事情,您可以如果没有必要,可以使用任何其他方式清洁内存缓冲区或根本不清除内存缓冲区.
Han*_*ant 12
使用SecureZeroMemory初始化图标信息结构是没有意义的.它只能覆盖应该在其他地方安全擦除的堆栈帧上的字节.那匹马已经逃过了谷仓.完全初始化它甚至没有意义,GetIconInfo()的返回值告诉你它已初始化.
SecureZeroMemory()仅在内存充满安全数据后才有意义.