2009-11-19 51 views
3

是否有一個可用的工具掛鉤Windows COM運行時? 我希望能夠看到所有創建的實例,查看其接口查詢,方法調用等。掛接窗口COM運行時

謝謝!

回答

4

你可以嘗試喬納斯布隆克的COMTrace - ?我不知道它是否適用於Windows 7,但它的值得一試。

+0

太好了。界面並不完美,但是它本身的作用。 – sharptooth 2009-11-27 13:38:17

0

使用in-proc COM服務器幾乎沒有什麼可以掛鉤 - 消費者調用CoCreateInstance()或CoGetClassObject(),這就是它的全部功能。其餘的都是在COM對象實現中完成的。您可能需要查看ATL源代碼,以瞭解它通常如何工作 - 例如,當消費者調用QueryInterface()時,調用直接進入相應的對象,而對象本身是觀察調用的唯一實體。

這並不是非常幸運,但它是如何實現進程內COM服務器的直接後果。開發人員可以使用Process Monitor來注意對應於ClassId-> Dll映射發現的註冊表訪問以及COM對象內的廣泛跟蹤以查看發生了什麼。 ATL有一些有用的東西(比如COM_INTERFACE_ENTRY_FUNC_BLIND宏)來結合跟蹤。

+0

但是不是由標準COM運行時庫實現的CoCreateInstance?如果它沒有靜態鏈接到服務器,我們應該能夠全局掛鉤該功能。 什麼是超出proc服務器?所有消費者對其方法的調用都會被編組,所以肯定有攔截這些調用的方法? – Danra 2009-11-20 15:56:00

+0

我沒有簡單的方法,我知道。當然,您可以掛接到實現CoCreateInstance()的.dll文件,但它不是一個優雅或簡單的解決方案。 – sharptooth 2009-11-20 16:02:04

+0

我覺得這是非常優雅的掛鉤到COM庫,因爲這是我想要做的:) 我只是不知道任何工具,這樣做的鉤子和很好地呈現結果,間諜++樣式(除處理COM對象而不是窗口)。 – Danra 2009-11-20 19:20:58

1
+0

看起來很有前途,它枚舉了所有註冊的接口並顯示了IDispatch支持的方法。但是,實際的掛鉤功能對我來說並不適用,也許是因爲我使用的是Windows 7(即使當我以管理員身份運行顯示器時也沒有工作)。 列出的版本是0.1,所以如果* some *功能缺失,這並不令人驚訝。 無論如何,我會盡快在Windows XP上試用它,希望它在那裏運行良好! – Danra 2009-11-21 08:08:18

+0

似乎對我來說根本不起作用... 只是列出了安裝在註冊表中的接口。 – Danra 2009-11-23 08:44:20

1

監視你想要的東西,你需要掛鉤到系統dll中,並在查詢的接口上注入盲目的委託者。不用說這個任務有多複雜和容易出錯,特別是如果考慮到許多實現者不準確地遵循COM原則。儘管如此,一些應用程序爲了他們自己的目的而做了這些,而沒有公開這個功能

如果你真的想要走這條路 - 先來看看這些:

+0

我不認爲你知道一個sysinternals風格的工具,這個鉤子?:) – Danra 2009-11-21 12:05:31

+0

對,我不知道。 似乎Hernán提到的com-spy-console完全可以做到這一點,或許值得向他們提供Win7支持。 – Andrey 2009-11-22 08:12:12