【问题标题】:Initializing COM Security Failed初始化 COM 安全性失败
【发布时间】:2016-05-02 16:34:33
【问题描述】:

我正在尝试从 DLL 初始化 COM 安全性,但我收到错误 800401f0。我主要使用标准方法,

代码:


 HRESULT hres;

    hres = CoInitializeEx(0, COINIT_MULTITHREADED);

    // Step 2: --------------------------------------------------
    // Set general COM security levels --------------------------

    hres = CoInitializeSecurity(
        NULL,
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved
        );

如果我从我的 app.exe 运行它,它工作得很好,但问题是我在 .DLL 中运行它,它实际上是 Main.exe 的函数扩展器(我没有访问权限 - 源代码或任何)。

我用来获取机器数据的整个代码,例如 - BIOS 版本,通过 IWbemClassObjectIEnumWbemClassObject,所以我想知道解决它的更简单/更简单的方法是什么,或者检索硬件数据(比如 @ 987654325@Win32_BIOS SerialNumberWin32_VideoController Name?

【问题讨论】:

    标签: c++ com


    【解决方案1】:

    错误800401f0 表示尚未为当前线程调用 CoInitialize,但您的代码 sn-p 使其看起来像。

    我猜sn-p中显示的代码要么来自你自己的app.exe,要么来自dll,那么这两个调用不是在同一个线程上进行的。

    这意味着您需要在 dll 中初始化 COM,但这并不像看起来那么简单,因为您不控制应用程序线程 - 应避免在 dll 中初始化 COM,除非您可以确保控制执行 COM 调用的线程。

    一个可能的解决方案是create a worker thread for COM calls where you can initialize COM according to your requirements

    【讨论】:

    • 好吧,现在它更清楚了,所以我想打电话给DLLMain DLLDLL_THREAD_ATTACH 吗? BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) case DLL_THREAD_ATTACH: SetCOMInit() - 那是什么工作线程?
    • 我不确定我是否理解正确,但你不能只在 DllMain 调用中初始化 COM。你需要创建一个线程,这实际上是一件棘手的事情:stackoverflow.com/questions/1688290/…
    • 该死的似乎真的很难,也许有一些更好的方法来获取 HWID 信息,以便在执行它的机器上实际绑定程序。
    猜你喜欢
    • 2018-06-10
    • 2011-10-31
    • 2015-01-23
    • 1970-01-01
    • 2016-03-25
    • 2012-11-17
    • 2017-12-10
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多