初始化 COM 安全性失败
Initializing COM Security Failed
我正在尝试从 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 中,它实际上是 [= 的功能扩展器28=](我没有访问权限 - 来源或任何)。
我用这整个代码来获取机器数据,比如 - BIOS 版本,通过 IWbemClassObject
和 IEnumWbemClassObject
,所以我想知道 easier/simpler 解决它的方法是什么,或检索硬件数据(如 BIOSVersion
Win32_BIOS SerialNumber
Win32_VideoController Name
?
错误 800401f0
表示尚未为当前线程调用 CoInitialize,但您的代码片段使其看起来像这样。
我想代码片段中显示的代码要么来自您自己的 app.exe,要么来自 dll,那么这两个调用不是在同一线程上进行的。
这意味着您需要在 dll 中初始化 COM,但这并不像看起来那么简单,因为您不控制应用程序线程 - 应避免在 dll 中初始化 COM,除非您可以确保您控制执行 COM 调用的线程。
一个可能的解决方案是create a worker thread for COM calls where you can initialize COM according to your requirements。
我正在尝试从 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 中,它实际上是 [= 的功能扩展器28=](我没有访问权限 - 来源或任何)。
我用这整个代码来获取机器数据,比如 - BIOS 版本,通过 IWbemClassObject
和 IEnumWbemClassObject
,所以我想知道 easier/simpler 解决它的方法是什么,或检索硬件数据(如 BIOSVersion
Win32_BIOS SerialNumber
Win32_VideoController Name
?
错误 800401f0
表示尚未为当前线程调用 CoInitialize,但您的代码片段使其看起来像这样。
我想代码片段中显示的代码要么来自您自己的 app.exe,要么来自 dll,那么这两个调用不是在同一线程上进行的。
这意味着您需要在 dll 中初始化 COM,但这并不像看起来那么简单,因为您不控制应用程序线程 - 应避免在 dll 中初始化 COM,除非您可以确保您控制执行 COM 调用的线程。
一个可能的解决方案是create a worker thread for COM calls where you can initialize COM according to your requirements。