मैं कॉम रोकना CoCreateInstanceEx और/या CoGetClassObject कार्यों एक इकाई परीक्षण में एक परीक्षण शिम के साथ एक वर्ग को बदलने के लिए चाहते हैं। यह केवल एक सीएलएसआईडी के लिए होगा; अन्य सभी अपरिवर्तित के माध्यम से जा सकते हैं। क्या भयानक, बुराई हैक्स के बिना ऐसा करने का कोई तरीका है?क्या CoGetClassObject और/या CoCreateInstance कॉल को हुक या अवरुद्ध करने का कोई तरीका है?
उत्तर
यह वास्तव में क्या आप चाहते हैं पर निर्भर करता है।
आप पता लगाने के लिए जो उस वर्ग लोड कर रहा है या क्या यह सब आप Process Monitor उपयोग कर सकते हैं पर लोड किया जाता है पता लगाना चाहते हैं। CoGetClassObject()
(या CoCreateInstanceEx()
) करने के लिए एक कॉल के लिए नेतृत्व करेंगे एक HKCR\CLSID\{Class of interest id}
कुंजी जा रहा है पढ़ सकते हैं और प्रक्रिया की निगरानी आपको बताएंगे कि क्या प्रक्रिया है और इस और कैसे सफल यह है करता है जब।
तुम अपने साथ एक मौजूदा वर्ग बदलना चाहते हैं - एक ही कक्षा आईडी के साथ वर्ग के अपने संस्करण के साथ एक पुस्तकालय संकलन और HKCR\CLSID\{Class of interest id}
ताकि अपने पुस्तकालय के साथ एक वर्ग की सेवा के लिए प्रयोग किया जाता है अंदर COM सर्वर के लिए पथ बदल आईडी। आप इसे मैन्युअल रूप से या regsvr32 के साथ कर सकते हैं - पहले मूल लाइब्रेरी पंजीकृत करें, फिर ब्याज रजिस्ट्रेशन के वर्ग को ओवरराइड करने के लिए। COM क्लास आईडी करता है -> उस कुंजी के माध्यम से लाइब्रेरी मैपिंग जब उपभोक्ता CoGetClassObject()
या CoCreateInstanceEx()
पर कॉल करता है।
दुर्भाग्यवश, मैं इसके लिए रजिस्ट्री के साथ गड़बड़ नहीं कर सकता - यह स्वचालित परीक्षण सूट पर चलाएगा, और जिस कक्षा में मैं ओवरराइड करना चाहता हूं वह 'CLSID_KnownFolderManager' है, इसलिए शायद इसे ओवरराइड करना एक बुरा विचार है एक प्रणाली-व्यापी तरीके :) सबसे बुरे मामले में, मैं परीक्षण करने के लिए कोड का वाद्य यंत्र कर सकता था, लेकिन अगर इसे एक प्रक्रिया के लिए बदलने का एक साफ तरीका है, तो यह अच्छा होगा। – bdonlan
सबसे पहले, परीक्षण सूट चलाने के बाद आप मूल लाइब्रेरी को पंजीकृत कर सकते हैं और यह सैनिटी को पुनर्स्थापित करेगा। दूसरा, आप केवल वर्तमान उपयोगकर्ता के लिए अपनी संशोधित लाइब्रेरी पंजीकृत कर सकते हैं - HKCU \ Software \ Classes \ CLSID को संशोधित करें। इसके अलावा आप कुछ भी कम या कम सुरुचिपूर्ण नहीं कर सकते हैं। – sharptooth
वहाँ हमेशा CoTreatAsClass
समारोह है: http://msdn.microsoft.com/en-us/library/ms693452(VS.85).aspx
लेकिन, जैसा कि आप का उल्लेख किया है, यह वर्ग का एक सिस्टम-वाइड प्रतिस्थापन, नहीं एक स्थानीय बदलाव किया जाएगा।
वैकल्पिक रूप से, आप CoCreateInstance hooking के रूप में पद शे Erlichmen की टिप्पणी से संदर्भित में सुझाव पर गौर कर सकता है।
- 1. क्या कॉल को कैश करने का कोई तरीका है?
- 2. क्या पहले मौका अपवादों को लॉग या अवरुद्ध करने का कोई तरीका है
- 3. उसी मशीन पर ऑब्जेक्ट्स बनाते समय CoCreateInstance() और CoGetClassObject() के बीच क्या अंतर है?
- 4. क्या यह सिस्टम कॉल को अवरुद्ध करने का एक अच्छा तरीका है?
- 5. पायथन में एक हुक या कॉलबैक को लागू करने का पसंदीदा तरीका क्या है?
- 6. क्या मेरी साइट पर डेटा लाने के लिए कर्ल को अवरुद्ध करने का कोई तरीका है?
- 7. Win32 में, क्या सॉकेट गैर-अवरुद्ध होने पर परीक्षण करने का कोई तरीका है?
- 8. क्या कॉल करने का कोई तरीका है जो कॉल करता है?
- 9. PHP हुक करने का सबसे अच्छा तरीका
- 10. एसएएसएस, मिश्रण को कॉल करने का सही तरीका क्या है?
- 11. क्या __init__ को कॉल किए बिना कक्षा को तुरंत चालू करने का कोई तरीका है?
- 12. क्या रननेबल को पैरामीटर पास करने का कोई तरीका है?
- 13. क्या Django के ग्रहण में Pyunit में unittest हुक करने का कोई तरीका है?
- 14. क्या ऐसा करने का कोई तरीका है?
- 15. क्या configManager.AppSettings को ओवरराइड करने का कोई तरीका है?
- 16. क्या गिसिस ग्रैफर को काम करने का कोई तरीका है?
- 17. क्या एक्सएमएल चेतावनियों को अक्षम करने का कोई तरीका है?
- 18. क्या कोई मौजूदा संपत्ति या विधि तक पहुंचने का प्रयास करने का कोई तरीका है?
- 19. क्या फॉर्म प्रतिक्रिया को अनदेखा करने का कोई तरीका है?
- 20. क्या एचएटीओएम माइक्रोफॉर्मेट को सत्यापित करने का कोई तरीका है?
- 21. क्या कोई लेबल अक्षम करने का कोई तरीका है?
- 22. क्या कोई सबवर्सन चेकआउट हुक या कुछ समान है?
- 23. आपके मुख्य धागे को अवरुद्ध करने वाले कोड को खोजने का सबसे अच्छा तरीका क्या है?
- 24. क्या ओपनिड को लागू करने का कोई आसान तरीका है?
- 25. क्या gif फ़ाइलों को सिंक करने का कोई तरीका है?
- 26. क्या लिनक्स को डिकंपाइल करने का कोई तरीका है। तो?
- 27. क्या SQLLataReader को मल्टीथ्रेड करने का कोई तरीका है?
- 28. क्या TabControl.Items.CurrentChanging को रद्द करने का कोई तरीका है?
- 29. क्या सी संरचना को डंप करने का कोई तरीका है?
- 30. क्या वाईएक्स बिल्ड को तेज करने का कोई तरीका है?
शिकार: http://stackoverflow.com/questions/1505196/spying-on-com-objects –
@Shay, वास्तव में यह है। मैंने इसे डुप्ली के रूप में बंद करने के लिए वोट दिया है, लेकिन स्पष्ट रूप से यह पर्याप्त नहीं है कि केवल प्रश्नकर्ता वोट-टू-क्लोज़ (मैं हटाना नहीं चाहता, क्योंकि यह भविष्य में किसी की खोज में मदद कर सकता है) – bdonlan
डुप्लिकेट नहीं । यह सवाल COM वस्तुओं पर जासूसी कर रहा है। यह सवाल यूनिट परीक्षण के लिए है। CoCreateInstance को हुक करके समस्या को हल करने के पूर्व प्रयास - जिसका मतलब यह नहीं है कि इसका जवाब होना चाहिए। यह सवाल CoCreateInstance को हुक करना चाहता है। –