有没有办法挂钩或拦截CoGetClassObject和/或CoCreateInstance调用?
-
05-07-2019 - |
题
我想拦截COM CoCreateInstanceEx 和/或 CoGetClassObject 的功能在单元测试中用测试垫片替换类。这只适用于单个CLSID;所有其他人都可以保持不变。有没有办法在没有可怕的,邪恶的黑客的情况下做到这一点?
解决方案
这取决于你想要什么。
如果您想检测谁正在加载该类或查找是否已加载该类,您可以使用进程监视器。对 CoGetClassObject()
(或 CoCreateInstanceEx()
)的调用将导致读取 HKCR \ CLSID \ {Class of interest id}
键和Process Monitor将向您展示什么过程以及过程是什么以及它有多成功。
如果要用现有的类替换现有的类 - 使用具有相同类ID的类的版本编译库,并在 HKCR \ CLSID \ {Class of interest id} <中更改COM服务器的路径/ code>以便您的库用于为具有该id的类提供服务。您可以手动或使用regsvr32执行此操作 - 首先注册原始库,然后再覆盖您感兴趣的类别registartion。 COM做类ID - &gt;当消费者调用
CoGetClassObject()
或 CoCreateInstanceEx()
时,通过该键映射库。
其他提示
总是有 CoTreatAsClass
函数:
http://msdn.microsoft.com/en-us /library/ms693452(VS.85).aspx
但是,正如您所指出的,它将是整个系统的替代,而不是本地更改。
或者,您可以按照Shay Erlichmen评论引用的帖子中的建议来研究挂钩CoCreateInstance。
不隶属于 StackOverflow