2012-01-03 23 views
6

मुझे वर्तमान प्रक्रिया में सभी खुले हैंडल सूचीबद्ध करने की आवश्यकता है। चूंकि मुझे "एनमहैंडल्स" जैसे कोई फ़ंक्शन नहीं मिला, इसलिए मैं 0 से 1000 तक लूप बनाने की सोच रहा था। प्रश्न यह है कि मैं प्रत्येक हैंडल का नाम कैसे प्राप्त कर सकता हूं? मैं सी ++ का उपयोग कर रहा हूं और ओएस Win7 32-bit संपादित करें: मुझे जिस हैंडल की आवश्यकता है वह एक म्यूटेक्स है। म्युटेक्स के नाम की तुलना करके, मैं संभाल आईडी मैं OpenMutex का उपयोग कर समाधान पाया है लगते प्राप्त करना चाहते हैं, लेकिन मैं क्या 3 पैरामीटर पर पारित करने के लिए पता नहीं है,वर्तमान प्रक्रिया में सभी हैंडल का नाम प्राप्त करें

+2

"प्रत्येक हैंडल के नाम" से आपका क्या मतलब है? हैंडल के नाम नहीं हैं। क्या आपका मतलब हैंडल आईडी, संबंधित विंडो कक्षाएं या टेक्स्ट शीर्षक? –

+0

सभी हैंडल नामों वाली फ़ाइलों का संदर्भ नहीं देते हैं। क्या आपने प्रोसेस एक्सप्लोरर को देखने पर विचार किया है? –

+0

वह दृष्टिकोण काम नहीं करेगा। किस तरह के हैंडल? – SLaks

उत्तर

5

मेरा मानना ​​है कि आप का उपयोग करने के लिए है Ntdll.dll। मेरे ज्ञान के लिए यह है कि सभी उपकरण निगरानी प्रक्रियाओं, हैंडल और अन्य सिस्टम जानकारी, विंडोज के तहत अंत में उपयोग करना होगा। मैंने इसे एक छोटे से Win32 उपकरण में उपयोग किया, हालांकि इसे कभी भी हैंडल सूचीबद्ध नहीं करना पड़ा।

उस पुस्तकालय के अच्छे परिचय और आपके प्रश्न से संबंधित के लिए यहां देखें। http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

इसके अलावा http://forum.sysinternals.com/enumerate-opened-files_topic3577.html

की पहली पोस्ट में GetObjectName समारोह Windows में इस प्रकार की जानकारी को एक्सेस करना बहुत काम होने लगते हैं और भयावह लग रहा है क्योंकि माइक्रोसॉफ्ट ने इसे समर्थन करने के लिए नहीं चाहता है सकते हैं, लेकिन आप देखेंगे कि जब 'आसान' एपीआई आपको जो कुछ चाहिए उसे नहीं दे रहा है, तो आपको एनटीडीएलएल को खोदना होगा। यह अंत में ProcessExplorer जैसे टूल का उपयोग करता है। इसका उपयोग करना इतना कठिन नहीं है: डीएलएल लोड करें, सही फ़ंक्शन पॉइंटर्स को उन structs को भरने के लिए प्राप्त करें जिन्हें आप स्वयं को नेट पर पाएंगे।

+0

मैं प्रक्रियाओं की सलाह नहीं दे रहा हूं, यह वर्तमान प्रक्रिया – WePro2

+0

में स्थित हैंडल है जिसे मैंने बुरी तरह समझाया। एनटीडीएलएल.डीएलएल लाइब्रेरी गहरी प्रणाली की जानकारी (प्रक्रियाओं, हैंडल इत्यादि) के बारे में जानकारी प्राप्त करने के लिए है। यह एक डीएलएल है जो माइक्रोसॉफ्ट द्वारा अनियंत्रित है लेकिन आप दिए गए लिंक पर या गुगलिंग द्वारा दस्तावेज पा सकते हैं। आपको बस डीएलएल में कॉल करने के लिए structs और कार्यों को जानना होगा। – fury

+0

यह हैंडल के नाम को पुनः प्राप्त करने के लिए बहुत सारे काम देखता है। मुझे लगता है कि OpenMutex वह उत्तर हो सकता है जिसे मैं ढूंढ रहा हूं, लेकिन मुझे यकीन नहीं है कि मुझे mutex (\ सत्र \ 1 \ BaseNamedObjects \ somemutex) या केवल तीसरे पैरामीटर पर somemutex का पूरा पथ पारित करने की आवश्यकता है। मैंने दोनों को आजमाया है लेकिन – WePro2

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