मैं Merhdad के जवाब पर एक टिप्पणी के रूप में इस छोड़ने के लिए जा रहा था, लेकिन यह बहुत लंबा हो गया ...
Mehrdad के जवाब 100% सही है। यह भी थोड़ा भ्रामक है। "PreviousMode" लेख "एनटी और जेडब्लू का उपयोग ..." लेख से जुड़ा हुआ लेख मेहदद इसमें अधिक विस्तार से जाता है। पैराफ्रेशिंग: एनटी और जेडब्ल्यू एपीआई कॉल के बीच प्राथमिक अंतर यह है कि ज़ेड कॉल सिस्टम कॉल प्रेषक के माध्यम से जाते हैं, लेकिन ड्राइवरों के लिए, एनटी कॉल एपीआई को सीधी कॉल हैं।
जब कोई ड्राइवर ज़ेड एपीआई कहता है, तो सिस्टम कॉल प्रेषक के माध्यम से चलने का एकमात्र वास्तविक प्रभाव यह है कि यह उपयोगकर्ता मोड के बजाय केजीनेटप्रिडमोड() को कर्नेलमोड में सेट करता है (जाहिर है कि उपयोगकर्ता मोड कोड, ज़ेड और एनटी फॉर्म समान हैं) । जब विभिन्न सिस्टम कॉल देखते हैं कि ExGetPreviousMode कर्नेलमोड है, तो वे एक्सेस जांच को बाईपास करते हैं (क्योंकि ड्राइवर कुछ भी कर सकते हैं)।
यदि कोई ड्राइवर एपीआई के एनटी फॉर्म को कॉल करता है, तो यह संभव है कि एक्सेस एक्सेस के कारण यह विफल हो जाए।
एक ठोस उदाहरण: यदि कोई ड्राइवर NtCreateFile को कॉल करता है, तो NtCreateFile SeAccessCheck() को कॉल करने के लिए कॉल करेगा, यह देखने के लिए कि ड्राइवर में कॉल करने वाले एप्लिकेशन को फ़ाइल बनाने की अनुमति है या नहीं। यदि ZwCreateFile नामक वही ड्राइवर है, तो NtCreateFile API कॉल SeAccessCheck को कॉल नहीं करेगा क्योंकि ExGetPreviousMode ने कर्नेलमोड वापस कर दिया है और इस प्रकार ड्राइवर को फ़ाइल तक पहुंच माना जाता है।
यह महत्वपूर्ण चालक लेखकों दोनों के बीच अंतर को समझने के लिए है, क्योंकि यह सुरक्षा पर गहरा प्रभाव हो सकता है ...
स्रोत
2011-01-23 16:55:12
अजीब बात है - हम आधार है कि हम नहीं चाहते थे कि पर एक महत्वपूर्ण एपीआई के लिए एपीआई उपसर्ग चुना एक उपसर्ग का उपयोग करने के लिए जिसका उपयोग भविष्य में कुछ महत्वपूर्ण के लिए किया जा सकता है। –
@ब्लैंक: अच्छा, यह मजाकिया है, लेकिन फिर, मैं किसी भी बेहतर विकल्प के बारे में नहीं सोच सकता। : \ – Mehrdad