如何跟踪进程创建的ActiveX控件?

时间:2011-04-07 08:07:52

标签: c++ c windows com activex

我想跟踪某些进程创建的ActiveX控件。为简化问题,我首先要监控当前流程。我想这样做,以便我可以检查是否有任何ActiveX控件支持IOleWindow,如果是,那么,给定的HWND是否属于该ActiveX控件(以便我可以将HWND映射到ActiveX控件)。

有人有这方面的经验吗?我的第一个想法是使用API​​挂钩监视CoCreateInstance调用,但我读到这并不适用于所有情况。一些谷歌研究显示http://www.pocketsoap.com/sf/activation.html谈到安装自定义类工厂 - 这将如何工作?

2 个答案:

答案 0 :(得分:2)

您可能会发现使用UI自动化和Active Accessibility API可以找到您需要了解的内容:

如果您确定需要这样做,请注意以下事项。 CoCreateInstance本质上是一个便利函数,它包含CoGetClassObjectIClassObject::CreateInstance

如果您打算使用该技术,那么您也必须挂钩CoGetClassObject,因为该过程可能会直接使用它。

当然没有法律规定任何库或DLL都不能提供它自己的便利功能,完全绕过COM注册表。注册表本身是一种方便 - 如果您知道DLL的位置,您可以使用LoadLibraryGetProcAddress来查找DllGetClassObject并检索类对象而不涉及COM库,实际上没有DLL正在注册。

答案 1 :(得分:0)

我最终挂钩CoCreateInstance和CoGetClassObject来跟踪正在创建的所有COM对象。