2011-04-28 20 views
19

इस छोटे से कार्यक्रम में, GetCurrentProcess() वापसी -1 क्यों करता है?GetCurrentProcess वापसी -1 क्यों करता है?

int _tmain(int argc, _TCHAR* argv[]) { 
    HANDLE h = GetCurrentProcess(); // ret -1 
    printf("0x%x\n",(DWORD)h); 
    return 0; 
} 

क्या गलत है?

Kernel32.GetCurrentProcess में मैं यह देख:

OR EAX,FFFFFFFF ; EAX - ? 
RETN 
+0

में टिप्पणी अनुभाग का उल्लेख कर सकते हैं यह एक आत्म-संदर्भित विशेष मामला है। यदि आप 'ओपनप्रोसेस (...)' का उपयोग करके किसी कारण (शायद आईपीसी के लिए) की आवश्यकता है तो आप अपनी प्रक्रिया का प्रतिनिधित्व करने वाले वास्तविक 'हैंडल' प्राप्त कर सकते हैं। –

उत्तर

21

यह सही है, this API reference for GetCurrentProcess देखें।

GetCurrentProcess समारोह को पुन: प्राप्त मौजूदा प्रक्रिया है, जो वर्तमान (HANDLE)-1 के रूप में परिभाषित किया गया है के लिए एक छद्म संभाल। हालांकि, क्योंकि आपको यह नहीं मानना ​​चाहिए कि मान कभी नहीं बदलेगा, GetCurrentProcess फ़ंक्शन को आपके कोड में निरंतर हार्ड-कोडिंग के विकल्प के रूप में प्रदान किया जाता है।

6

-1 छद्म संभाल है कि मौजूदा प्रक्रिया का प्रतिनिधित्व करता है। यह आम है।

4

-1 मूल्य के साथ कुछ भी गलत नहीं है। यह वर्तमान प्रक्रिया संभाल इंगित करेगा। आप this msdn page

+1

यदि आप इस संभाल को प्रक्रिया सीमाओं में संवाद करने का प्रयास करते हैं तो यह व्यर्थ है, इसलिए आप इसे कैसे देखते हैं इसके आधार पर कुछ गड़बड़ है। प्रक्रिया ए में यह प्रक्रिया ए को संदर्भित करता है, यदि आप बी को संसाधित करने के लिए पास करते हैं तो यह प्रक्रिया बी को संदर्भित करता है। वास्तविक (गैर-नकारात्मक) हैंडल में इन गुण नहीं होते हैं, और जब प्रक्रिया ए से बी पारित होने पर उनकी मूल प्रक्रिया का संदर्भ जारी रहता है। –

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