다음을 통해 공유


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를 호출합니다. 자세한 내용은 클라이언트 응용 프로그램 프로세스 보안 설정을 참조하세요. 특정 프록시에 대한 보안을 설정하거나 변경하려면 CoSetProxyBlanket을 호출해야 합니다. 인증, 가장 또는 인증 서비스에 대한 기본 보안 설정을 제어할 수 없는 다른 프로세스 내에서 실행할 때 COM 보안을 설정하거나 변경해야 할 때마다 CoSetProxyBlanket을 사용합니다. 자세한 내용은 WMI 연결에서 보안 수준 설정IWbemServices 및 기타 프록시에서 보안 설정을 참조하세요.

    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 네임스페이스에 대한 액세스