C++ 如何跟踪由进程创建的ActiveX控件?
我想跟踪某个进程创建的ActiveX控件。为了简化这个问题,我首先只想监视当前流程。我想这样做,以便检查是否有ActiveX控件支持,如果支持,则检查给定的HWND是否属于该ActiveX控件(以便我可以将HWND映射到ActiveX控件)C++ 如何跟踪由进程创建的ActiveX控件?,c++,c,windows,com,activex,C++,C,Windows,Com,Activex,我想跟踪某个进程创建的ActiveX控件。为了简化这个问题,我首先只想监视当前流程。我想这样做,以便检查是否有ActiveX控件支持,如果支持,则检查给定的HWND是否属于该ActiveX控件(以便我可以将HWND映射到ActiveX控件) 有人有这方面的经验吗?我的第一个想法是使用API挂钩来监视调用,但我了解到这并不适用于所有情况。一些谷歌研究揭示了关于安装自定义类工厂的内容-这将如何工作?您可能会发现,使用UI自动化和活动辅助功能API,您可以找到需要了解的内容: 如果您确定需要这样
有人有这方面的经验吗?我的第一个想法是使用API挂钩来监视调用,但我了解到这并不适用于所有情况。一些谷歌研究揭示了关于安装自定义类工厂的内容-这将如何工作?您可能会发现,使用UI自动化和活动辅助功能API,您可以找到需要了解的内容:
CoCreateInstance
本质上是一个方便的函数,它包装了CoGetClassObject
和IClassObject::CreateInstance
如果要使用该技术,则也必须钩住CoGetClassObject
,因为进程可能直接使用它
当然,没有法律规定任何库或DLL都不能提供自己的方便函数,而这些函数完全绕过COM注册表。注册表本身很方便-如果您知道DLL的位置,可以使用
LoadLibrary
,GetProcAddress
查找DllGetClassObject
并检索类对象,而无需涉及COM库,实际上,没有注册DLL。我最终连接了CoCreateInstance和CoGetClassObject来跟踪所有正在创建的COM对象。+1感谢您指出,CoCreateInstance
基本上只是一个包装函数,我没有意识到这一点。