调用CoUninitialize时崩溃

时间:2015-02-23 07:15:52

标签: c++ wmi

基于this link,我创建了Windows Processing MonitoringWindows Service Monitoring个DLL,这些DLL将由主应用程序调用并在线程中运行它们(使用boost::thread)来获取数据是异步的。考虑到这两个dll都是由我的应用程序运行的。我收到了其中一个应用的错误Failed to initialize security. Error code = 0x80010119。并且当停止这些dll的线程时,在它们中都调用CoUninitialize。我在这里遇到了崩溃。这可能是因为后一个线程中的CoUninitialize可能会尝试清除前一个线程清除的内存。

如果是这样,我如何检查一个线程中的CoUninitialize是否成功,以便我不会在另一个线程中调用它。

2 个答案:

答案 0 :(得分:0)

CoUninitialize是COM库的一部分,WMI可以使用COM接口,但与其初始化或处理无关。不要在一个进程中两次调用CoUninitialize。请注意,您的两个DLL可能共享应用程序上下文并在其中执行。

答案 1 :(得分:0)

"如何检查一个线程中的CoUninitialize是否成功,以便我不会在另一个线程中调用它。"

这告诉我你的错误,但它不在CoUninitialize。您假设CoUninitialize是整个流程的。实际上,CoUninitialize镜像CoInitializeEx,并且应该在每个线程上完成。因此,您的崩溃几乎肯定是由一个线程上的CoInitializeEx和另一个线程上的CoUninitialize引起的。

修复是在两个线程上执行CoInitializeEx,并在两个线程上执行CoUninitialize