2009-11-19 77 views
3

是否有一个可用的工具挂钩Windows COM运行时? 我希望能够看到所有创建的实例,查看其接口查询,方法调用等。挂接窗口COM运行时

谢谢!

回答

4

你可以尝试乔纳斯布隆克的COMTrace - ?我不知道它是否适用于Windows 7,但它的值得一试。

+0

太好了。界面并不完美,但是它本身的作用。 – sharptooth 2009-11-27 13:38:17

0

使用in-proc COM服务器几乎没有什么可以挂钩 - 消费者调用CoCreateInstance()或CoGetClassObject(),这就是它的全部功能。其余的都是在COM对象实现中完成的。您可能需要查看ATL源代码,以了解它通常如何工作 - 例如,当消费者调用QueryInterface()时,调用直接进入相应的对象,而对象本身是观察调用的唯一实体。

这并不是非常幸运,但它是如何实现进程内COM服务器的直接后果。开发人员可以使用Process Monitor来注意对应于ClassId-> Dll映射发现的注册表访问以及COM对象内的广泛跟踪以查看发生了什么。 ATL有一些有用的东西(比如COM_INTERFACE_ENTRY_FUNC_BLIND宏)来结合跟踪。

+0

但是不是由标准COM运行时库实现的CoCreateInstance?如果它没有静态链接到服务器,我们应该能够全局挂钩该功能。 什么是超出proc服务器?所有消费者对其方法的调用都会被编组,所以肯定有拦截这些调用的方法? – Danra 2009-11-20 15:56:00

+0

我没有简单的方法,我知道。当然,您可以挂接到实现CoCreateInstance()的.dll文件,但它不是一个优雅或简单的解决方案。 – sharptooth 2009-11-20 16:02:04

+0

我觉得这是非常优雅的挂钩到COM库,因为这是我想要做的:) 我只是不知道任何工具,这样做的钩子和很好地呈现结果,间谍++样式(除处理COM对象而不是窗口)。 – Danra 2009-11-20 19:20:58

1
+0

看起来很有前途,它枚举了所有注册的接口并显示了IDispatch支持的方法。但是,实际的挂钩功能对我来说并不适用,也许是因为我使用的是Windows 7(即使当我以管理员身份运行显示器时也没有工作)。 列出的版本是0.1,所以如果* some *功能缺失,这并不令人惊讶。 无论如何,我会尽快在Windows XP上试用它,希望它在那里运行良好! – Danra 2009-11-21 08:08:18

+0

似乎对我来说根本不起作用... 只是列出了安装在注册表中的接口。 – Danra 2009-11-23 08:44:20

1

监视你想要的东西,你需要挂钩到系统dll中,并在查询的接口上注入盲目的委托者。不用说这个任务有多复杂和容易出错,特别是如果考虑到许多实现者不准确地遵循COM原则。尽管如此,一些应用程序为了他们自己的目的而做了这些,而没有公开这个功能

如果你真的想要走这条路 - 先来看看这些:

+0

我不认为你知道一个sysinternals风格的工具,这个钩子?:) – Danra 2009-11-21 12:05:31

+0

对,我不知道。 似乎Hernán提到的com-spy-console完全可以做到这一点,或许值得向他们提供Win7支持。 – Andrey 2009-11-22 08:12:12