检索指向IWbemServices代理的指针后,必须设置代理服务器上的安全性才能通过代理访问WMI。您必须设置安全性,因为IWbemServices代理授予访问进程外对象的权限。一般来说,COM安全性不允许一个进程访问另一个进程,如果您没有设置正确的安全属性。有关详细信息,请参阅设置IWbemServices和其他代理的安全性.与不同操作系统的连接需要不同级别的身份验证和模拟。有关详细信息,请参阅连接到远程计算机上的WMI.
本主题中的代码示例需要以下引用和#include语句才能正确编译。
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
以下过程介绍如何设置WMI连接上的安全级别。
设置WMI连接上的安全级别
· | 通过调用CoSetProxyBlanket来设置IWbemServices代理服务器上的安全级别。 |
以下代码示例描述了调用CoSetProxyBlanket的常用方法。
HRESULT hres;
IWbemServices *pSvc = 0;
IWbemLocator *pLoc = 0;
// Set the proxy so that impersonation of the client occurs.
hres = CoSetProxyBlanket(pSvc,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE
);
if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return hres; // Program has failed.
}
为您的IWbemServices指针设置安全级别后,您可以访问WMI的各种功能。使用WMI后,您必须关闭应用程序。有关详细信息,请参阅清理并关闭WMI应用程序.