M. *_* R. 9 delphi com automation
我正在尝试设计一个可以在任何不同的应用程序上识别COM对象及其属性的应用程序.这是我第一次尝试这样做,而且我不确定从哪里开始.理想情况下,它将使用Delphi XE2制作,但我愿意接受建议.
如果我有CLSID,有没有办法"扫描"正在运行的应用程序以查找基于它的对象?或者,换句话说,是否有更好的方法在任何正在运行的应用程序中列出/查找活动对象?
非常感谢任何帮助,以及关于该主题的良好文档的任何指示.
编辑:问题实际上是在任何其他应用程序中查找COM对象,列出属性以及我需要的其他问题已在其他问题中得到解答.
无法扫描正在运行的COM对象.一旦它们被实例化 - 它们只是由其他东西引用的内存块(成员接口指针变量等).
有时将对象放在Running Objects Table(ROT)上,您可以从那里检索它们,如注释中已建议的那样.这个属性,比方说,是COM对象实例的1%,但也许你很幸运能够追逐那些.
我能想到的唯一方法是挂钩COM对象实例化,以便您拦截创建,然后能够跟踪您自己的现有实例列表.这也不是一种简单的方法(也很可能是不安全的).
要实现这一点,您需要在运行流程的上下文中注册您的类对象,CLSID并让您的类工厂接收实例化调用.或者,钩子CoCreateInstanceAPI,如Detours.
一旦你挂钩实例化,你就会在创建对象时有指针,你又需要对它们做一些事情.你会希望将这些实例呼叫转移到原来的API,然后跟踪实例的续航时间 - 如果你把一个额外的参考你很可能会改变应用程序的原始行为的对象.否则,您无法控制COM对象释放.有时可以聚合创建COM类,您可以或多或少地将原始实例简洁地嵌入COM对象中.
总而言之,总的来说,任务似乎不可行.具有特定CLSID的兴趣,有一定的运气和相当大的努力,你可能会成功地做到这一点.
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |