This MSND article dice SecureZeroMemory()
è buono per i casi in cui i dati sensibili memorizzati in memoria per un po 'dovrebbero essere di sicuro sovrascritti il più presto possibile quando non più necessari. Le risposte a this SO question spiegano perché questo può fare la differenza.Qualsiasi motivo per utilizzare SecureZeroMemory() invece di memset() o ZeroMemory() quando la sicurezza non è un problema?
Ora è possibile utilizzare SecureZeroMemory()
per inizializzare solo tutti i blocchi di memoria? Ad esempio, in un progetto che vedo codice come il seguente:
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);
}
Perché usare SecureZeroMemory()
qui invece di ZeroMemory()
, memset()
o il valore di inizializzazione? Voglio dire se il compilatore decide che l'inizializzazione non è necessaria e vuole ottimizzarla - perché dovrei farla rispettare? C'è qualche ragione per usare SecureZeroMemory()
qui?