在 WMI 连接上设置安全级别
检索指向 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 应用程序。