2011-04-07 60 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