Inicjowanie modelu COM dla aplikacji WMI
Pierwszym krokiem podczas nawiązywania połączenia z usługą WMI jest skonfigurowanie wywołań COM do CoInitializeEx i CoInitializeSecurity.
Przykłady kodu w tym temacie wymagają następujących odwołań i instrukcji #include w celu poprawnego skompilowania.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
Poniższa procedura opisuje, jak zainicjować COM z aplikacji klienckiej.
Zainicjować COM z aplikacji klienckiej
Inicjalizuj COM, wywołując funkcję CoInitializeEx.
Wywoływanie CoInitializeEx to standardowa procedura konfigurowania interfejsu COM. W związku z tym usługa WMI nie wymaga przestrzegania żadnych dodatkowych procedur podczas wywoływania CoInitializeEx. Aby uzyskać więcej informacji, zobacz COM.
W poniższym przykładzie kodu opisano sposób wywoływania 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; }
Ustaw ogólne poziomy zabezpieczeń COM za pomocą wywołania interfejsu CoInitializeSecurity.
CoInitializeSecurity to standardowa funkcja, którą należy wywołać podczas konfigurowania interfejsu COM dla procesu. Wywołaj CoInitializeSecurity, jeśli chcesz ustawić domyślne ustawienia zabezpieczeń uwierzytelniania, personifikacji lub usługi uwierzytelniania dla całego procesu. Aby uzyskać więcej informacji, zobacz Ustawianie Bezpieczeństwa Procesu Aplikacji Klienta. Jeśli chcesz ustawić lub zmienić zabezpieczenia dla określonego serwera proxy, musisz wywołać CoSetProxyBlanket. Użyj coSetProxyBlanket zawsze, gdy musisz ustawić lub zmienić zabezpieczenia COM podczas uruchamiania wewnątrz innego procesu, w którym nie można kontrolować domyślnych ustawień zabezpieczeń uwierzytelniania, personifikacji lub usługi uwierzytelniania. Aby uzyskać więcej informacji, zobacz Ustawianie poziomów zabezpieczeń na połączeniu WMI i Ustawianie zabezpieczeń na IWbemServices i innych serwerach proxy.
Usługa WMI ma kilka problemów z zabezpieczeniami, o których należy pamiętać podczas programowania aplikacji klienckiej usługi WMI. Aby uzyskać więcej informacji, zobacz Ustawianie zabezpieczeń procesu aplikacji klienckiej.
W poniższym przykładzie kodu opisano sposób wywoływania CoInitializeSecurity w celu ustawienia zabezpieczeń COM dla procesu.
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. }
Po zainicjowaniu modelu COM następnym krokiem jest utworzenie połączenia z przestrzenią nazw usługi WMI. Aby uzyskać więcej informacji, zobacz Tworzenie połączenia z przestrzenią nazw usługi WMI.
Tematy pokrewne