This MSND article sagt SecureZeroMemory()
ist gut für Fälle, wenn sensible Daten im Speicher für eine Weile gespeichert werden sollte sicher so schnell wie möglich überschrieben werden, wenn nicht mehr benötigt wird. Antworten auf this SO question erklären, warum dies einen Unterschied machen kann.Gibt es einen Grund, SecureZeroMemory() anstelle von memset() oder ZeroMemory() zu verwenden, wenn Sicherheit kein Problem ist?
Jetzt ist es sinnvoll, SecureZeroMemory()
für die Initialisierung nur jeden Speicherblock zu verwenden? Zum Beispiel in einem Projekt sehe ich Code wie folgt aus:
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);
}
warum SecureZeroMemory()
verwenden hier statt ZeroMemory()
, memset()
oder Wert Initialisierung? Ich meine, wenn der Compiler entscheidet, dass die Initialisierung unnötig ist und sie optimieren will - warum würde ich das erzwingen? Gibt es einen Grund, SecureZeroMemory()
hier zu verwenden?