连接到WMI的第一步是设置到CoInitializeEx和CoInitializeSecurity的COM调用。
本主题中的代码示例需要以下引用和#include语句才能正确编译。
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
以下过程介绍如何从客户端应用程序初始化COM。
从客户端应用程序初始化COM
1.通过调用CoInitializeEx初始化COM。
调用CoInitializeEx是设置COM接口的标准步骤。因此,在调用CoInitializeEx时,WMI不要求您遵守任何其他步骤。有关更多信息,请参阅COM。
以下代码示例描述如何调用CoInitializeEx。
HRESULT hr;
hr = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hr))
{ cout << "Failed to initialize COM library. Error code = 0x"
<< hex << hr << endl;
return hr;
}
2.通过调用CoInitializeSecurity接口设置常规COM安全级别。
CoInitializeSecurity是为进程设置COM接口时必须调用的标准函数。如果要为整个过程设置认证,模拟或身份验证服务的默认安全设置,请调用CoInitializeSecurity.有关详细信息,请参阅设置客户端应用程序进程安全性.如果要设置或更改特定代理的安全性,则必须调用CoSetProxyBlanket.当您在不能控制身份验证,模拟或身份验证服务的默认安全设置的另一个进程中运行时,必须设置或更改COM安全性时,请使用CoSetProxyBlanket.有关详细信息,请参阅在WMI连接上设置安全级别和设置IWbemServices和其他代理的安全性.
WMI在编程WMI客户端应用程序时应该注意几个安全问题。有关详细信息,请参阅设置客户端应用程序进程安全性.
以下代码示例说明如何调用CoInitializeSecurity以设置进程中的COM安全性。
hr = CoInitializeSecurity(
NULL, // Security descriptor
-1, // COM negotiates authentication service
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication level for proxies
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation level for proxies
NULL, // Authentication info
EOAC_NONE, // Additional capabilities of the client or server
NULL); // Reserved
if (FAILED(hr))
{
cout << "Failed to initialize security. Error code = 0x"
<< hex << hr << endl;
CoUninitialize();
return hr; // Program has failed.
}
初始化COM后,您的下一步是创建到WMI命名空间的连接。有关详细信息,请参阅创建与WMI命名空间的连接。
也可以看看
使用C ++创建WMI应用程序
访问WMI命名空间