只有在实现它的DLL签名时才创建COM对象?

时间:2008-10-07 14:52:00

标签: com code-signing

我们有一些代码使用LoadLibrary和GetProcAddress为我们的某个产品实现插件架构。我们确保将使用我们的代码签名密钥对要加载的DLL进行签名。

我们正在改变插件架构以改为使用COM。有没有办法在实例化COM对象时强制执行代码签名(最好使用我们的证书)?

2 个答案:

答案 0 :(得分:2)

您需要使用Authenticode API在DLL级别执行此操作。标准API称为WinVerifyTrust(),并在那里记录了样本。还有另一个KB article number 323809给出了一个示例,说明如何从附加到DLL的authenticode信息中删除其他详细信息。

当然,这些API希望能够传递给DLL本身的路径,而在COM插件场景中,您通常不直接触摸它,而是依靠注册来找到正确的二进制文件。您可以手动滚动加载方案(即使用LoadLibrary()加载DLL并自行调用DllGetClassObject()),或者只需要API的用户遵守其他规则,例如将DLL放在某个位置,而不管注册

或者正如Rob Walker建议的那样,自己在注册表中查找CLSID注册,并使用它作为查找正确的DLL进行验证的方法。

答案 1 :(得分:1)

我认为您不能直接执行此操作,但您可以在注册表中查找CLSID使用的DLL,并在发出CoCreateInstance调用之前检查其签名。