我目前正在从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);
Run Code Online (Sandbox Code Playgroud)
其失败HRESULT的错误0x80010119(RPC_E_TOO_LATE,安全必须是任何接口编组或解组之前进行初始化,它不能改变初始化一次.)
我从导入函数的VB6程序中运行导出的函数Declare Function vss Lib vshadow.dll ....
错误是否意味着已经调用了VB6程序CoInitializeSecurity?我该怎么做才能对付这个错误?
另外,我还有另一个问题:为什么确切地说是安全值RPC_C_AUTHN_LEVEL_PKT_PRIVACY并RPC_C_IMP_LEVEL_IDENTIFY选择了?其他设置会产生什么影响?
Han*_*ant 12
有几个标准的COM调用不属于DLL.与CoInitializeEx()一样,为线程初始化COM的调用.DLL没有自己的线程,它无法覆盖EXE选择的公寓状态.
CoInitializeSecurity()是另一个,EXE的工作就是调用它.只有它知道要传递的正确值,它才是确定安全策略的值.一个DLL不能,它对客户端进程一无所知.
| 归档时间: |
|
| 查看次数: |
12167 次 |
| 最近记录: |