回答
你可以嘗試喬納斯布隆克的COMTrace - ?我不知道它是否適用於Windows 7,但它的值得一試。
使用in-proc COM服務器幾乎沒有什麼可以掛鉤 - 消費者調用CoCreateInstance()或CoGetClassObject(),這就是它的全部功能。其餘的都是在COM對象實現中完成的。您可能需要查看ATL源代碼,以瞭解它通常如何工作 - 例如,當消費者調用QueryInterface()時,調用直接進入相應的對象,而對象本身是觀察調用的唯一實體。
這並不是非常幸運,但它是如何實現進程內COM服務器的直接後果。開發人員可以使用Process Monitor來注意對應於ClassId-> Dll映射發現的註冊表訪問以及COM對象內的廣泛跟蹤以查看發生了什麼。 ATL有一些有用的東西(比如COM_INTERFACE_ENTRY_FUNC_BLIND宏)來結合跟蹤。
但是不是由標準COM運行時庫實現的CoCreateInstance?如果它沒有靜態鏈接到服務器,我們應該能夠全局掛鉤該功能。 什麼是超出proc服務器?所有消費者對其方法的調用都會被編組,所以肯定有攔截這些調用的方法? – Danra 2009-11-20 15:56:00
我沒有簡單的方法,我知道。當然,您可以掛接到實現CoCreateInstance()的.dll文件,但它不是一個優雅或簡單的解決方案。 – sharptooth 2009-11-20 16:02:04
我覺得這是非常優雅的掛鉤到COM庫,因爲這是我想要做的:) 我只是不知道任何工具,這樣做的鉤子和很好地呈現結果,間諜++樣式(除處理COM對象而不是窗口)。 – Danra 2009-11-20 19:20:58
監視你想要的東西,你需要掛鉤到系統dll中,並在查詢的接口上注入盲目的委託者。不用說這個任務有多複雜和容易出錯,特別是如果考慮到許多實現者不準確地遵循COM原則。儘管如此,一些應用程序爲了他們自己的目的而做了這些,而沒有公開這個功能
如果你真的想要走這條路 - 先來看看這些:
- MS走彎路會幫助你的DLL掛鉤(http://research.microsoft.com/en-us/projects/detours/)
- 「COM之家」盲代表團文章(http://www.microsoft.com/msj/0399/com/com0399.aspx )。撰稿唐盒(或者我應該說「世界上最偉大的COM專家唐盒」 :-)
- 1. 掛接PHP運行時
- 2. 蟒蛇加載窗口COM接口
- 3. 運行線程時,窗口偶爾掛起/死機
- 4. pygame窗口掛
- 5. 窗口消息v/s COM連接點
- 6. 從命令行運行sphinx-quickstart掛在窗口上
- 7. 掛接到GHC的運行時系統
- 8. iTunes COM接口
- 9. Casting COM接口
- 10. COM雙接口
- 11. 子窗口關閉時如何運行父窗口的功能?
- 12. 當窗口用戶切換活動窗口時運行程序
- 13. python主窗口掛起計時器
- 14. 在運行時窗口/ python操縱versioninfo
- 15. 運行時Tkinter窗口空白
- 16. 當窗口關閉時運行代碼
- 17. Pygame窗口凍結時代碼運行
- 18. 在運行時創建WPF窗口
- 19. DIRECT9.0窗口(全屏運行時)
- 20. 相當於JScript運行時的窗口
- 21. Tkinter窗口在運行時關閉
- 22. 在運行時壓縮WPF窗口
- 23. 窗口setBackGround:導致運行時錯誤
- 24. 窗口上的運行時繪圖
- 25. Jquery - 在窗口加載時運行$ .ajax()
- 26. COM接口的GUID
- 27. Siebel COM接口 - PHP
- 28. COM接口聲明
- 29. 運行./config.sh時出現「無法連接到X11窗口」異常。
- 30. 我可以有我的窗口EXE(與GUI)暴露COM接口
太好了。界面並不完美,但是它本身的作用。 – sharptooth 2009-11-27 13:38:17