2012-03-29 13 views
9

मैं ऐसे एप्लिकेशन को डिज़ाइन करने की कोशिश कर रहा हूं जो COM ऑब्जेक्ट्स और उनके गुणों को किसी भी अलग एप्लिकेशन पर पहचान सके। यह मेरी पहली बार ऐसा करने का प्रयास कर रहा है, और मुझे यकीन नहीं है कि कहां से शुरू करना है। आदर्श रूप में, यह डेल्फी XE2 का उपयोग करके किया जाएगा, लेकिन मैं सुझावों के लिए खुला हूं।तृतीय पक्ष सॉफ़्टवेयर से COM ऑब्जेक्ट्स और गुणों की पहचान/लिस्टिंग

यदि मेरे पास सीएलएसआईडी है, तो क्या इस पर आधारित वस्तुओं के लिए चल रहे एप्लिकेशन को स्कैन करने का कोई तरीका है? या, किसी अन्य तरीके से चल रहा है, क्या किसी भी चल रहे एप्लिकेशन में सक्रिय ऑब्जेक्ट्स को सूचीबद्ध/ढूंढने का एक बेहतर तरीका है?

किसी भी मदद की सराहना की जाती है, साथ ही विषय पर अच्छे दस्तावेज़ीकरण की दिशा में कोई भी निर्देश।

संपादित करें: समस्या वास्तव में किसी अन्य एप्लिकेशन, COM लिस्टिंग गुणों में COM ऑब्जेक्ट्स को ढूंढ रही है और जो भी मुझे चाहिए, अन्य प्रश्नों में मुझे पहले से ही उत्तर दिया गया है।

+0

अन्य एप्लिकेशन को कोड इंजेक्ट करें जो सिस्टम में सभी ज्ञात अनुप्रयोग ऑब्जेक्ट्स के लिए GetActiveObject को कॉल करेगा। क्षमा करें, मैं किसी और चीज के बारे में नहीं सोच सकता .. –

+0

क्या आपने [GetRunningObjectTable] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684004%28v=vs.85%29 की कोशिश की है .aspx) समारोह? – RRUZ

+0

मुझे आरओटी के साथ सीमित सफलता मिली है, क्योंकि स्पष्ट रूप से एप्लिकेशन को वस्तुओं को स्पष्ट रूप से पंजीकृत करना होगा, जो हमेशा मामला नहीं है। –

उत्तर

6

COM ऑब्जेक्ट चलाने के लिए स्कैन करने का कोई तरीका नहीं है। जैसे ही वे तत्काल होते हैं - वे कुछ और (संदर्भ इंटरफ़ेस सूचक चर आदि) द्वारा संदर्भित स्मृति के टुकड़े हैं।

कभी-कभी वस्तुओं को ऑब्जेक्ट्स टेबल (ROT) पर रखा जाता है और आप उन्हें वहां से पुनर्प्राप्त कर सकते हैं, जैसा कि पहले से ही टिप्पणियों में सुझाया गया है। यह गुण, मान लें, < COM ऑब्जेक्ट उदाहरणों का 1%, लेकिन शायद आप वास्तव में उन लोगों का पीछा करने के लिए भाग्यशाली हैं।

एकमात्र तरीका जिसे मैं सोच सकता हूं वह हुक COM ऑब्जेक्ट इंस्टेंटेशन है ताकि आप सृजन को रोक सकें और फिर मौजूदा उदाहरणों की अपनी सूची को ट्रैक कर सकें। हालांकि यह एक आसान तरीका नहीं है (और यह भी असुरक्षित होने की संभावना है)।

इसे प्राप्त करने के लिए आपको अपनी रुचि के CLSID के लिए चल रही प्रक्रिया के संदर्भ में अपनी कक्षा वस्तु को पंजीकृत करने की आवश्यकता है और आपके क्लास फैक्ट्री को तत्काल कॉल प्राप्त करें। या, हुक CoCreateInstance एपीआई, जैसे Detours के साथ।

एक बार जब आप तत्कालता को झुका रहे हैं तो आपके पास ऑब्जेक्ट सृजन के क्षण पॉइंटर्स हैं और आपको फिर से उनके साथ कुछ करने की आवश्यकता है। आप उन इंस्टॉलेशन कॉल को मूल एपीआई में अग्रेषित करना चाहते हैं, फिर उदाहरणों के जीवनकाल को ट्रैक करने के लिए - यदि आप ऑब्जेक्ट का अतिरिक्त संदर्भ डालते हैं तो आप एप्लिकेशन के मूल व्यवहार को बदलने की संभावना रखते हैं। अन्यथा, आपके पास COM ऑब्जेक्ट रिलीज़ को रोकने के लिए कोई नियंत्रण नहीं है। कभी-कभी COM कक्षाओं को समेकित बनाया जा सकता है और आप अपने COM ऑब्जेक्ट में मूल उदाहरण को कम से कम स्पष्ट रूप से एम्बेड कर सकते हैं।

सभी में, सामान्य रूप से कार्य को लागू करने के लिए व्यवहार्य प्रतीत नहीं होता है। ब्याज के विशिष्ट CLSID होने के साथ, एक निश्चित भाग्य और काफी प्रयास के साथ आप ऐसा करने में सफल हो सकते हैं।

+0

शायद मैं इस गलत तरीके से और जटिल चीजों पर आ रहा हूं? मुझे वीबी 6 में विकसित एक एप्लीकेशन में कुछ लेबल और संपादन पढ़ने में सक्षम होना चाहिए, लेकिन मेरे पास स्रोत कोड तक कोई पहुंच नहीं है। ऐसा करने के लिए, क्या आप कहेंगे कि मुझे अभी भी तत्काल हुक करना होगा? –

+0

@Roman, क्या आरओटी से जानकारी प्राप्त करना संभव है जिस पर (क्लाइंट) प्रक्रिया ने एक प्रविष्टि (यदि कोई हो) का आह्वान किया हो? यदि आपका दूसरा पैराग्राफ प्रश्न के लिए अप्रासंगिक नहीं है, तो प्रश्न पूछता है कि कैसे एक विशेष प्रक्रिया को तुरंत शुरू करने के लिए वस्तुओं को जानना है। –

+0

@ एमपीआर, मेरी राय यह है कि उदाहरणों के लिए स्मृति स्कैन करना निश्चित रूप से गलत तरीका है। यह देखते हुए कि आपके पास उदाहरण के कुछ हस्ताक्षर हैं, आदि पर स्थित उदाहरण ढेर, यह अभी भी बेहद दर्दनाक प्रक्रिया की तरह दिखता है। लेकिन आप अपनी वस्तुओं के बारे में बहुत कुछ जानते हैं - क्या वे ActiveX नियंत्रण हैं? अगर वे हैं, esp। खिड़कीबद्ध, तो आप नियंत्रण की खिड़कियां पा सकते हैं, और यदि वे एटीएल-आधारित हैं, तो संभवतः, आप शायद 'एचडब्ल्यूएनडी' से इंटरफेस प्राप्त करने के लिए एटीएल संदेशों का उपयोग कर सकते हैं, और यदि यह हुक काम करता है - तो आप आगे बढ़ने के लिए अच्छे हैं अच्छी तरह से ज्ञात इंटरफेस के माध्यम से गुणों की गणना पर। –