"कोई अजीब विंडोज प्रक्रिया Ids क्यों हैं?"
समान कोड जो कर्नेल हैंडल आवंटित करता है, का उपयोग प्रक्रिया और थ्रेड आईडी आवंटित करने के लिए भी किया जाता है। चूंकि कर्नेल हैंडल चार में से कई हैं, इसलिए प्रक्रिया और थ्रेड आईडी भी हैं।
प्रक्रिया और थ्रेड आईडी चार के गुणक क्यों हैं?
विंडोज एनटी-आधारित ऑपरेटिंग सिस्टम पर, प्रक्रिया और थ्रेड आईडी हमेशा चार के एक से अधिक होते हैं। क्या यह सिर्फ एक संयोग है?
हां, यह सिर्फ एक संयोग है, और आपको इस पर भरोसा नहीं करना चाहिए क्योंकि यह प्रोग्रामिंग अनुबंध का हिस्सा नहीं है। उदाहरण के लिए, विंडोज 95 प्रक्रिया और थ्रेड आईडी हमेशा चार के गुणक नहीं थे। (तुलना करके, कि कर्नेल के हैंडल हमेशा चार में से कई होते हैं, विनिर्देश का हिस्सा है और भविष्य के भविष्य के लिए इसकी गारंटी होगी।)
प्रक्रिया और थ्रेड आईडी कोड पुन: उपयोग के साइड-इफेक्ट के रूप में चार के गुणक हैं। समान कोड जो कर्नेल हैंडल आवंटित करता है, का उपयोग प्रक्रिया और थ्रेड आईडी आवंटित करने के लिए भी किया जाता है। चूंकि कर्नेल हैंडल चार में से कई हैं, इसलिए प्रक्रिया और थ्रेड आईडी भी हैं। यह एक कार्यान्वयन विवरण है, इसलिए उस पर निर्भर होने वाले कोड को न लिखें। मैं सिर्फ आपको अपनी जिज्ञासा को संतुष्ट करने के लिए कह रहा हूं।
स्रोत प्रक्रिया और थ्रेड आईडी चार के गुणक क्यों हैं?
कर्नेल हैंडल्स हमेशा चार के कई क्यों होते हैं?
बहुत अच्छी तरह से ज्ञात नहीं है कि कर्नेल हैंडल्स के निचले दो टुकड़े हमेशा शून्य होते हैं; दूसरे शब्दों में, उनका संख्यात्मक मान हमेशा 4 से अधिक होता है। ध्यान दें कि यह केवल कर्नेल हैंड्स पर लागू होता है; यह छद्म हैंडल या किसी अन्य प्रकार के हैंडल (USER हैंडल, GDI हैंडल, मल्टीमीडिया हैंडल ...) पर लागू नहीं होता है। कर्नेल हैंडल वे चीजें हैं जो आप CloseHandle फ़ंक्शन को पास कर सकते हैं।
नीचे दो बिट्स की उपलब्धता को ntdef.h हेडर फाइल में दफन किया गया है:
//
// Low order two bits of a handle are ignored by the system and available
// for use by application code as tag bits. The remaining bits are opaque
// and used to store a serial number and table index.
//
#define OBJ_HANDLE_TAGBITS 0x00000003L
कम से कम कर्नेल हैंडल्स का निचला हिस्सा हमेशा शून्य होता है जिसे GetQueuedCompletionStatus फ़ंक्शन द्वारा निहित किया जाता है, जो इंगित करता है कि आप पूर्ण पोर्ट अधिसूचना को दबाने के लिए इवेंट हैंडल के निचले बिट सेट कर सकते हैं। इसके लिए काम करने के लिए, नीचे का हिस्सा सामान्य रूप से शून्य होना चाहिए।
यह जानकारी अधिकांश अनुप्रयोग लेखकों के लिए उपयोगी नहीं है, जिन्हें हांडले को अपारदर्शी मान के रूप में जारी रखना चाहिए। जो लोग टैग बिट्स में रुचि रखते हैं, वे वे हैं जो निम्न-स्तरीय वर्ग पुस्तकालयों को लागू कर रहे हैं या कर्नेल ऑब्जेक्ट्स को बड़े ढांचे के अंदर लपेट रहे हैं।
स्रोत कर्नेल हैंडल्स हमेशा चार के कई क्यों होते हैं?
आगे की पढाई