Definindo os níveis de segurança em uma conexão WMI
Depois de recuperar um ponteiro para um proxy IWbemServices, você deve definir a segurança no proxy para acessar o WMI por meio dele. Você deve definir a segurança porque o proxy IWbemServices concede acesso a um objeto fora do processo. Em geral, a segurança do COM não permite que um processo acesse outro processo se você não definir as propriedades de segurança adequadas. Para obter mais informações, consulte Configurar a segurança no IWbemServices e outros proxies. As conexões com diferentes sistemas operacionais exigem diferentes níveis de autenticação e representação. Para obter mais informações, consulte Conexão ao WMI em um computador remoto.
Os exemplos de código neste tópico exigem que as referências e instruções #include a seguir sejam compiladas corretamente.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
O procedimento a seguir descreve como definir os níveis de segurança em uma conexão WMI.
Para definir os níveis de segurança em uma conexão WMI
Defina os níveis de segurança no proxy IWbemServices com uma chamada para CoSetProxyBlanket.
O exemplo de código a seguir descreve uma maneira comum de chamar 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. }
Depois de definir os níveis de segurança para o ponteiro IWbemServices, você poderá acessar os vários recursos do WMI. Depois de terminar de usar o WMI, você deve desligar o aplicativo. Para obter mais informações, consulte Limpar e desligar um aplicativo WMI.