Definindo os níveis de segurança em uma conexão WMI
Depois de recuperar um ponteiro para um IWbemServices proxy, você deve definir a segurança no proxy para acessar o WMI por meio do proxy. Você deve definir a segurança porque o proxy IWbemServices concede acesso a um objeto fora do processo. Em geral, a segurança 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 Configuração da segurança do IWbemServices e de outros proxies. Conexões com diferentes sistemas operacionais exigem níveis variados de autenticação e representação. Para obter mais informações, consulte Conectando-se ao WMI em um computador remoto.
Os exemplos de código neste tópico exigem as seguintes referências e instruções #include para compilar 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 IWbemServices proxy 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, pode aceder aos vários recursos do WMI. Depois de terminar de usar o WMI, você deve desligar seu aplicativo. Para obter mais informações, consulte Limpeza e desligamento de uma aplicação WMI.