共用方式為


初始化 COM 用於 WMI 應用程式

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

本主題中的程式代碼範例需要下列參考和 #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 命名空間的存取權