我想拦截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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top