繁体   English   中英

为什么COM CoInitializeSecurity在我的DLL中失败?

[英]Why does COM CoInitializeSecurity fail in my DLL?

我目前正在从MS Windows SDK 6.1学习VSHADOW.EXE 3.0。 我已经创建了一个可以编译成DLL的版本,该DLL只导出一个新编写的函数,该函数需要将命令行作为字符串,对其进行标记,然后调用旧的wmain DLL不是COM服务器。

当编译为EXE时,它与旧版本完全一样,但在编译为DLL时不能正常工作,因为此调用失败:

 CoInitializeSecurity(NULL, -1, NULL, NULL, 
                      RPC_C_AUTHN_LEVEL_PKT_PRIVACY, 
                      RPC_C_IMP_LEVEL_IDENTIFY, 
                      NULL, EOAC_NONE, NULL);

失败,出现HRESULT错误0x80010119RPC_E_TOO_LATE必须在任何接口编组或解组之前初始化安全性。初始化后无法更改。

我从VB6程序运行导出的函数,其中函数是使用Declare Function vss Lib vshadow.dll ...导入的。

该错误是否意味着VB6程序已经调用了CoInitializeSecurity 我该怎么做才能对付这个错误?

另外,我还有另一个问题:为什么选择安全值RPC_C_AUTHN_LEVEL_PKT_PRIVACYRPC_C_IMP_LEVEL_IDENTIFY 其他设置会产生什么影响?

有几个标准的COM调用属于DLL。 与CoInitializeEx()一样,为线程初始化COM的调用。 DLL没有自己的线程,它无法覆盖EXE选择的公寓状态。

CoInitializeSecurity()是另一个,EXE的工作就是调用它。 只有它知道要传递的正确值,它才是确定安全策略的值。 一个DLL不能,它对客户端进程一无所知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM