有没有一个可用的工具挂钩的Windows COM运行时? 我希望能够看到所有创build的实例,查看其接口的查询,方法调用等。
谢谢!
你可以尝试Jonas Blunck的COMTrace – 我不确定它是否可以在Windows 7上运行,但值得一试。
监视你想要的东西,你需要挂钩到系统dll,并注入盲目的委托人查询接口。 不用说这个任务有多复杂和容易出错,特别是如果考虑到许多实现者不准确地遵循COM原则。 但是,有些应用程序是为了自己的目的而做的,没有公开这个功能。
如果你真的想这样做 – 看看这些:
使用进程内COM服务器几乎没有什么可以挂钩的 – 消费者调用CoCreateInstance()或CoGetClassObject(),就这么做了。 其余的都是在COM对象实现中完成的。 您可能需要查看ATL源代码,看看它是如何工作的 – 例如,当消费者调用QueryInterface()时,直接调用相应的对象,而对象本身就是观察调用的唯一实体。
这并不是非常幸运,但是直接导致了如何实现进程内COM服务器。 开发人员可以使用进程监视器来注意对应于COM对象中ClassId-> Dll映射发现和广泛跟踪的注册表访问,看看发生了什么。 ATL有一些有用的东西(如COM_INTERFACE_ENTRY_FUNC_BLIND宏)来合并跟踪。