2010-01-06 7 views
8

This MSND article कहता है SecureZeroMemory() उन मामलों के लिए अच्छा है जब थोड़ी देर के लिए स्मृति में संग्रहीत संवेदनशील डेटा को जितनी जल्दी हो सके उतनी जल्दी ओवरराइट किया जाना चाहिए। this SO question के उत्तर बताते हैं कि इससे कोई फर्क क्यों पड़ सकता है।जब सुरक्षा कोई मुद्दा नहीं है तो memset() या ZeroMemory() के बजाय 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); 
} 

क्यों ZeroMemory(), memset() या मूल्य प्रारंभ करने के बजाय यहां SecureZeroMemory() का उपयोग करें? मेरा मतलब है कि संकलक प्रारंभिक निर्णय का अनावश्यक है और इसे अनुकूलित करना चाहता है - मैं इसे क्यों लागू करूं? क्या SecureZeroMemory() का उपयोग करने का कोई कारण है?

उत्तर

8

आइकन जानकारी संरचना आरंभ करने के लिए SecureZeroMemory का उपयोग करने का कोई मतलब नहीं है। यह केवल स्टैक फ्रेम पर बाइट्स को ओवरराइट कर सकता है जिसे सुरक्षित रूप से कहीं और मिटा दिया जाना चाहिए था। वह घोड़ा पहले से ही बार्न से बच निकला। इसे शुरू करने के लिए भी समझ में नहीं आता है, GetIconInfo() का वापसी मूल्य आपको बताता है कि इसे प्रारंभ किया गया है।

SecureZeroMemory() केवल को मेमोरी सुरक्षित डेटा से भरा हुआ था।

11

सिक्योरझेरोमोरी एक कंपाइलर द्वारा अनुकूलित-दूर नहीं है। यह महत्वपूर्ण है कि आपको अपनी याददाश्त की सामग्री को साफ करने के बारे में चिंता करने की आवश्यकता हो, तो कहें कि इसमें बहुत संवेदनशील उपयोगकर्ता जानकारी है, उदा। बैंकिंग सॉफ्टवेयर, पासवर्ड इत्यादि। जाहिर है अगर ऐसी चीजों के बारे में चिंता करने की कोई आवश्यकता नहीं है, तो आप मेमोरी बफर की सफाई करने के किसी अन्य तरीके का उपयोग कर सकते हैं या यदि आवश्यक नहीं है तो सफाई नहीं कर सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^