如何阻止某人调用我的COM接口API?

时间:2009-07-14 13:45:10

标签: com

我有一个COM inproc DLL,我们正在使用我们的产品。 现在,如果有人发现我们从DLL中公开了哪些接口和API,那么可以轻松调用这些API。

有没有办法阻止未知应用程序调用我的API?

我们可以在COM中添加一些签名吗?

4 个答案:

答案 0 :(得分:3)

控制对象使用的正式方法是在创建COM对象的类工厂上实现IClassFactory2。

这是MSDN解释界面的链接。

IClassFactory2 at MSDN

创建实现的好处是没有人可以在不通过IClassFactory2清除注册障碍的情况下获取实例。

缺点是您必须检查创建对象的所有位置,以确保它们没有损坏。创建实例变得更加繁重,尽管某些语言已经具备使该过程不那么痛苦的工具(例如VB6)。

如果您正在尝试保护具有大量实例化活动的对象,您可能希望使用Mastermind添加关键参数的方法,或者将某种类型的解锁方法添加到必须正确调用的接口之前可以使用它背后的组件。

答案 1 :(得分:2)

您可以使您的接口直接从IUnknown继承(不使用IDispatch),也不要将类型库包含在DLL中。这样只有那些有权访问类型库的人才能找到支持的接口,发现接口的唯一方法就是猜测。如果你这样做,你可能也希望尽可能减少暴露给注册表的类的数量(可以用CoCreateInstance()创建的类),并使用一些专用的注册表暴露类的工厂方法。

这意味着只有vtable早期绑定才能与您的组件一起使用。您也将无法使用此组件的默认调用编组(因为不包含类型库)。这不是真正的保护,只是隐藏事物的一种方式。

答案 2 :(得分:1)

没有什么可以阻止你向方法添加“key”参数,如果密钥错误,它将返回。

非常简单,但会为初学者做。

答案 3 :(得分:0)

除了某种“关键”参数之外,你无法防止好奇心发现你的功能然后再调用它。所需要的只是一个调试器和一些耐心。为了完全安全,您必须要求某种授权代码可以获得的证书,但所有其他证书都不能,但这意味着您的代码必须能够验证证书。