【问题标题】:How can I keep track of ActiveX controls created by a process?如何跟踪进程创建的 ActiveX 控件?
【发布时间】:2011-07-31 11:24:49
【问题描述】:

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

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

【问题讨论】:

    标签: c++ c windows com activex


    【解决方案1】:

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

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

    如果您要使用该技术,您将因此也必须挂钩CoGetClassObject,因为该进程可能会直接使用它。

    当然,没有法律规定任何库或 DLL 都不能提供自己的便利功能,从而完全绕过 COM 注册表。注册表本身很方便——如果您知道 DLL 在哪里,您可以使用LoadLibraryGetProcAddress 查找DllGetClassObject 并检索类对象,而无需涉及 COM 库,实际上根本无需注册 DLL。

    【讨论】:

    • +1 感谢您指出CoCreateInstance 基本上只是一个包装函数,我没有意识到这一点。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      相关资源
      最近更新 更多