我想跟踪某些进程创建的ActiveX控件。为简化问题,我首先要监控当前流程。我想这样做,以便我可以检查是否有任何ActiveX控件支持IOleWindow,如果是,那么,给定的HWND是否属于该ActiveX控件(以便我可以将HWND映射到ActiveX控件)。
有人有这方面的经验吗?我的第一个想法是使用API挂钩监视CoCreateInstance调用,但我读到这并不适用于所有情况。一些谷歌研究显示http://www.pocketsoap.com/sf/activation.html谈到安装自定义类工厂 - 这将如何工作?
答案 0 :(得分:2)
您可能会发现使用UI自动化和Active Accessibility API可以找到您需要了解的内容:
如果您确定需要这样做,请注意以下事项。 CoCreateInstance
本质上是一个便利函数,它包含CoGetClassObject
和IClassObject::CreateInstance
。
如果您打算使用该技术,那么您也必须挂钩CoGetClassObject
,因为该过程可能会直接使用它。
当然没有法律规定任何库或DLL都不能提供它自己的便利功能,完全绕过COM注册表。注册表本身是一种方便 - 如果您知道DLL的位置,您可以使用LoadLibrary
,GetProcAddress
来查找DllGetClassObject
并检索类对象而不涉及COM库,实际上没有DLL正在注册。
答案 1 :(得分:0)
我最终挂钩CoCreateInstance和CoGetClassObject来跟踪正在创建的所有COM对象。