2010-04-23 7 views
5

यदि कोई प्रक्रिया 32-बिट है और दूसरा 64-बिट है तो क्या किसी बच्चे की प्रक्रिया को उसके मूल प्रक्रिया से हैंडल प्राप्त करना संभव है?विंडोज़ विरासत को 32-बिट/64-बिट सीमा पार कर सकता है?

हैंडल Win64 पर 64 बिट प्रकार और Win32 पर 32 बिट प्रकार है, जो बताता है कि यहां तक ​​कि सभी मामलों में भी यह संभव होना चाहिए, कुछ ऐसे मामले होंगे जहां यह असफल होगा: 64-बिट पैरेंट प्रक्रिया , एक 32-बिट बाल प्रक्रिया, और एक हैंडल जिसे 32 बिट्स में प्रदर्शित नहीं किया जा सकता है।

या ऑब्जेक्ट को 32-बिट प्रक्रिया के लिए एकमात्र तरीका और एक ही ऑब्जेक्ट के लिए एक हैंडल प्राप्त करने के लिए 64-बिट प्रक्रिया का नामकरण कर रहा है?

उत्तर

7

यदि यह एक फ़ाइल हैंडल या अन्य कर्नेल हैंडल है, तो हाँ।

ऐसा होता है कि हालांकि हैंडल 64 बिट प्रकार है, लेकिन इसे हमेशा किसी भी वैध हैंडल मान के लिए 32 बिट और वापस परिवर्तित किया जा सकता है।

जीडीआई हैंडल विरासत में नहीं मिल सकते हैं।

0

हां, लेकिन 32-बिट हैंडल से 64-बिट हैंडल में कनवर्ट करते समय, मान को साइन-अप करना सुनिश्चित करें। यही है, बिट 31- के मूल्य पर 32-63 बिट सेट करें। इसलिए, 0x800000000xFFFFFFFF80000000 बन गया, 0x0000000080000000 नहीं। साथ ही, ध्यान दें कि 32 और 64-बिट हैंडल के बीच यह संगतता केवल उपयोगकर्ता-मोड हैंडल के लिए गारंटीकृत है (जो कि आप किसी भी तरह से तब तक व्यवहार कर रहे हैं जब तक आप कोई ड्राइवर या कुछ ऐसी चीज नहीं लिखते जो कर्नेल मोड में चलता है।)

यह भी देखें: this SO question and its answer (64-बिट अनुप्रयोग पर विंडोज हैंडल रेंज क्या है?)

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