【问题标题】:CoInitializeSecurity errorCoInitializeSecurity 错误
【发布时间】:2013-09-19 06:08:07
【问题描述】:

我有一个加载 1.dll 的 .exe,而 1.dll 加载 1_1.dll。 在 .exe 中,我创建了多个线程,我从其中一个线程调用一个函数,该函数调用一个 1.dll 函数,该函数在其他事物之间..调用 1_1.dll 中的一个函数,但无法执行此操作:

//  Initialize COM.
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if( FAILED(hr) )
    {
        //m_iStatus = ERROR_COINITIALIZE_EX;
        return;
    }
    //  Set general COM security levels.
    hr = CoInitializeSecurity(
        NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        0,
        NULL);
    if( FAILED(hr) )
    {
        CoUninitialize();
        //m_iStatus = ERROR_COINITIALIZE_SEC;
        return;
    }

使用此消息调用 CoInitializeSecurity 失败:

必须在编组或解组任何接口之前初始化安全性。初始化后无法更改。

谁能解释一下这里发生了什么,我做错了什么以及我应该如何解决这个问题?

【问题讨论】:

    标签: windows visual-c++ com


    【解决方案1】:

    CoInitializeSecurity function...

    ...每个进程只调用一次,显式或隐式调用

    DLL 可能需要调用CoInitializeSecurity 的唯一情况是当它被加载到进程中时,已知该进程不会自行初始化 COM。该进程基本上是 DLL 的瘦主机。也就是说,几乎从来没有。

    .EXE 的任务是做CoInitializeSecurity

    【讨论】:

    • 我在我的 vs 解决方案的其他任何地方都找不到任何其他对 CoInitializeSecurity 的调用
    • @AK - 进一步阅读:“对于遗留应用程序和其他未显式调用 CoInitializeSecurity 的应用程序,COM 使用注册表中的值隐式调用此函数。如果您使用注册表设置进程范围的安全性,然后调用 CoInitializeSecurity,则 AppID 注册表值将被忽略并使用 CoInitializeSecurity 值。"。简而言之,如果您手动执行此操作,则需要在进程启动后立即在 exe 中完成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多