2011-04-07 64 views
3

我想跟蹤由某個進程創建的ActiveX控件。爲了簡化問題,我首先只想監視當前進程。我想這樣做,以便我可以檢查是否有任何ActiveX控件支持IOleWindow,如果是,給定的HWND是否屬於該ActiveX控件(以便我可以將HWND映射到ActiveX控件)。如何跟蹤由進程創建的ActiveX控件?

有沒有人有這方面的經驗?我的第一個想法是使用API​​掛鉤來監視CoCreateInstance調用,但我讀到這在所有情況下都不起作用。谷歌的一些調查顯示http://www.pocketsoap.com/sf/activation.html其中談到安裝一個自定義類工廠 - 這將如何工作?

回答

0

我結束了連接CoCreateInstance和CoGetClassObject來跟蹤所有正在創建的COM對象。

2

你會發現,你可以找到你所需要使用的UI自動化和活動輔助功能的API知道:如果你確信你需要這樣做

,做到心中有數以下的。 CoCreateInstance本質上是一種便利功能,它包裝了CoGetClassObjectIClassObject::CreateInstance

如果您打算使用該技術,您因此也必須掛鉤CoGetClassObject,因爲該過程可能會直接使用它。

當然,沒有任何法律規定任何庫或DLL無法提供它自己的方便功能,它完全繞過了COM註冊表。註冊表本身很方便 - 如果您知道DLL的位置,則可以使用LoadLibrary,GetProcAddress來查找DllGetClassObject並檢索不包含COM庫的類對象,並且實際上完全沒有註冊該DLL。

+0

+1感謝您指出'CoCreateInstance'基本上只是一個包裝函數,我沒有意識到這一點。 – 2011-04-11 18:47:25