为什么COM CoInitializeSecurity在我的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
错误
0x80010119
RPC_E_TOO_LATE
,必须对安全性进行初始化,然后才能对任何接口进行编组或取消编组。初始化后就无法更改。) 我从VB6程序运行导出的函数,该函数使用
Declare Function vss Lib vshadow.dll ...
导入。 该错误是否表示VB6程序已调用ѭ6?我该如何处理错误? 另外,我还有一个问题:为什么要精确选择安全值
RPC_C_AUTHN_LEVEL_PKT_PRIVACY
RPC_C_IMP_LEVEL_IDENTIFY
?其他设置会有什么影响?     
已邀请:
有几个不属于DLL的标准COM调用。像CoInitializeEx()一样,为线程初始化COM的调用。 DLL不拥有线程,因此无法覆盖EXE选择的单元状态。 CoInitializeSecurity()是另一个,它是EXE的工作。只有它知道要传递的正确值,它才是确定安全策略的值。 DLL不能,它对客户端进程一无所知。     

要回复问题请先登录注册