初始化 WMI 應用程式的 COM

連線到 WMI 的第一個步驟是設定 CoInitializeExCoInitializeSecurity的 COM 呼叫。

本主題中的程式碼範例需要下列參考和#include語句才能正確編譯。

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")

下列程式描述如何從用戶端應用程式初始化 COM。

從用戶端應用程式初始化 COM

  1. 使用 對 CoInitializeEx的呼叫,初始化 COM。

    呼叫 CoInitializeEx 是設定 COM 介面的標準程式。 因此,WMI 不需要您在呼叫 CoInitializeEx時觀察任何其他程式。 如需詳細資訊,請參閱 COM

    下列程式碼範例說明如何呼叫 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;
    }
    
  2. 使用 CoInitializeSecurity 介面的呼叫來設定一般 COM 安全性層級。

    CoInitializeSecurity 是您在設定進程的 COM 介面時必須呼叫的標準函式。 如果您想要為整個進程設定驗證、模擬或驗證服務的預設安全性設定,請呼叫 CoInitializeSecurity 。 如需詳細資訊,請參閱 設定用戶端應用程式進程安全性。 如果您想要設定或變更特定 Proxy 的安全性,您必須呼叫 CoSetProxyBlanket。 每當您在另一個進程內執行時,都必須設定或變更 COM 安全性,而您無法控制驗證、模擬或驗證服務的預設安全性設定時,請使用 CoSetProxyBlanket 。 如需詳細資訊,請參閱在 WMI 連線上設定安全性層級在 IWbemServices 和其他 Proxy 上設定安全性

    WMI 有數個安全性問題,您應該在設計 WMI 用戶端應用程式時注意。 如需詳細資訊,請參閱 設定用戶端應用程式進程安全性

    下列程式碼範例說明如何呼叫 CoInitializeSecurity ,以在程式上設定 COM 安全性。

    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.
    }
    

初始化 COM 之後,下一個步驟是建立與 WMI 命名空間的連線。 如需詳細資訊,請參閱 建立與 WMI 命名空間的連線。

使用 C++ 建立 WMI 應用程式

存取 WMI 命名空間