勇芳软件工作室.汉化:  Windows Management Instrumentation > Creating WMI Clients > Creating a WMI Application or Script > Creating a WMI Application Using C++ >

Initializing COM for a WMI Application

Previous pageReturn to chapter overviewNext page

连接到WMI的第一步是设置到CoInitializeExCoInitializeSecurity的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命名空间