Initializing COM for a WMI Application
The first step in connecting to WMI is setting up the COM calls to CoInitializeEx and CoInitializeSecurity.
The code examples in this topic require the following references and #include statements to compile correctly.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
The following procedure describes how to initialize COM from a client application.
To initialize COM from a client application
Initialize COM with a call to CoInitializeEx.
Calling CoInitializeEx is a standard procedure for setting up a COM interface. Therefore, WMI does not require that you observe any additional procedures when calling CoInitializeEx. For more information, see COM.
The following code example describes how to call 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; }
Set the general COM security levels with a call to the CoInitializeSecurity interface.
CoInitializeSecurity is a standard function you must call when setting up a COM interface for a process. Call CoInitializeSecurity if you want to set the default security settings for authentication, impersonation, or authentication service for an entire process. For more information, see Setting Client Application Process Security. If you want to set or change the security for a specific proxy, you must call CoSetProxyBlanket. Use CoSetProxyBlanket whenever you must set or change COM security when running inside another process where you cannot control the default security settings for authentication, impersonation, or authentication service. For more information, see Setting the Security Levels on a WMI Connection and Setting the Security on IWbemServices and Other Proxies.
WMI has several security issues you should be aware of when programming a WMI client application. For more information, see Setting Client Application Process Security.
The following code example describes how to call CoInitializeSecurity to set COM security on the process.
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. }
After you initialize COM, your next step is to create a connection to a WMI namespace. For more information, see Creating a Connection to a WMI Namespace.
Related topics