回答
你可以尝试乔纳斯布隆克的COMTrace - ?我不知道它是否适用于Windows 7,但它的值得一试。
使用in-proc COM服务器几乎没有什么可以挂钩 - 消费者调用CoCreateInstance()或CoGetClassObject(),这就是它的全部功能。其余的都是在COM对象实现中完成的。您可能需要查看ATL源代码,以了解它通常如何工作 - 例如,当消费者调用QueryInterface()时,调用直接进入相应的对象,而对象本身是观察调用的唯一实体。
这并不是非常幸运,但它是如何实现进程内COM服务器的直接后果。开发人员可以使用Process Monitor来注意对应于ClassId-> Dll映射发现的注册表访问以及COM对象内的广泛跟踪以查看发生了什么。 ATL有一些有用的东西(比如COM_INTERFACE_ENTRY_FUNC_BLIND宏)来结合跟踪。
但是不是由标准COM运行时库实现的CoCreateInstance?如果它没有静态链接到服务器,我们应该能够全局挂钩该功能。 什么是超出proc服务器?所有消费者对其方法的调用都会被编组,所以肯定有拦截这些调用的方法? – Danra 2009-11-20 15:56:00
我没有简单的方法,我知道。当然,您可以挂接到实现CoCreateInstance()的.dll文件,但它不是一个优雅或简单的解决方案。 – sharptooth 2009-11-20 16:02:04
我觉得这是非常优雅的挂钩到COM库,因为这是我想要做的:) 我只是不知道任何工具,这样做的钩子和很好地呈现结果,间谍++样式(除处理COM对象而不是窗口)。 – Danra 2009-11-20 19:20:58
监视你想要的东西,你需要挂钩到系统dll中,并在查询的接口上注入盲目的委托者。不用说这个任务有多复杂和容易出错,特别是如果考虑到许多实现者不准确地遵循COM原则。尽管如此,一些应用程序为了他们自己的目的而做了这些,而没有公开这个功能
如果你真的想要走这条路 - 先来看看这些:
- MS走弯路会帮助你的DLL挂钩(http://research.microsoft.com/en-us/projects/detours/)
- “COM之家”盲代表团文章(http://www.microsoft.com/msj/0399/com/com0399.aspx )。撰稿唐盒(或者我应该说“世界上最伟大的COM专家唐盒” :-)
- 1. 从命令行运行sphinx-quickstart挂在窗口上
- 2. COM双接口
- 3. iTunes COM接口
- 4. 子窗口关闭时如何运行父窗口的功能?
- 5. 当窗口用户切换活动窗口时运行程序
- 6. 在运行时创建WPF窗口
- 7. Jquery - 在窗口加载时运行$ .ajax()
- 8. 运行时Tkinter窗口空白
- 9. 在运行时窗口/ python操纵versioninfo
- 10. 在运行时压缩WPF窗口
- 11. 当窗口关闭时运行代码
- 12. 窗口上的运行时绘图
- 13. Tkinter窗口在运行时关闭
- 14. COM接口声明
- 15. COM接口的GUID
- 16. 我可以有我的窗口EXE(与GUI)暴露COM接口
- 17. 在窗口关闭时运行窗体窗体线程
- 18. 挂钩窗口挂钩时不能正确绘制
- 19. 在使用setInerval窗口挂
- 20. 窗口安装挂起
- 21. SBT 0.13.7-RC2挂起(窗口)
- 22. 挂钩到窗口进程
- 23. Dispatcher.Invoke挂起主窗口
- 24. 清除PyCharm运行窗口
- 25. 在窗口上运行wexpect
- 26. 运行时修改COM端口设备名称(Windows)
- 27. IUnknown接口 - 用于COM \ COM +对象?
- 28. 。COM接口COM服务器失败,0x80080005
- 29. Windows窗体:接线,在运行时
- 30. Windows窗体在运行线程时挂起
太好了。界面并不完美,但是它本身的作用。 – sharptooth 2009-11-27 13:38:17