jameshoo兄,我记得你发过帖说成功hook了com。好象你说不同实例都会进到你的hook 函数,this指针不同,想和你确定下这个问题

解决方案 »

  1.   

    本来准备问点现成的资料,就不用再写测试了,结果jameshoo没来,呵呵
      

  2.   

    貌似有这个帖子讲过HOOK COM的, 坐等jameshoo
      

  3.   

    我之前写的,Hook COM
    http://blog.csdn.net/akirya/archive/2009/04/13/4070681.aspx
      

  4.   

    com不是提供了二进制层次上的封装,它也能被hook么?学习...
      

  5.   

    今天被人提醒了一下,才发现有人向我提问,但ID名写错了,所以我没有收到。话说当年搞这个HOOK确实成功了,但关键之处不是我搞成功的,而是 zhoujianhei(好像就是这个ID),当时的试验环境是:
    系统创建了一个接口实例,我HOOK了其中一个接口方法(其它方法不理),这个容易成功。我希望验证一下同一个接口的其它实例是不是也自动被我HOOK了。按照C++原理,同一个类是共享相同虚表的,HOOK一个虚表对所有实例都有效,但在COM环境中不能成立,原因就在于,组件是在其它的模块中实现的,即使是同一个接口定义,在不同模块中都会有各自的虚表地址,所以它可能会指向不同模块中的虚表。换句话说,两个模块提供的同一种接口类型实际上是两种不同的类型。
    其实里面的机制我还没完全搞明白,因为在特定环境下,获得的COM接口只是一个代理接口,代理接口是如何产生这个虚表的,我也没明白,现在也懒得去深究了。