다음을 통해 공유


IWbemServices 및 기타 프록시에서 보안 설정

C++에서 IWbemLocator::ConnectServer를 통해 WMI에 연결하기 전에 CoInitializeSecurity를 호출하여 전체 프로세스에서 보안을 설정할 수 있습니다. IWbemServices 또는 IWbemCallResult와 같은 WMI 프록시에 대한 포인터를 가져오는 호출에서 인증 수준, 가장 수준 또는 인증 서비스를 변경할 수도 있습니다. CoSetProxyBlanket을 호출하면 인증 서비스(Kerberos, NTLM 또는 Negotiate)를 변경할 수도 있습니다.

스크립트 및 Visual Basic 애플리케이션은 SWbemServices 및 기타 자동화 개체에 대한 호출을 통해서만 프록시에 대한 보안을 간접적으로 설정합니다. 스크립트에서 인증 및 가장을 설정하고 변경하는 방법에 대한 자세한 내용은 VBScript를 사용하여 기본 프로세스 보안 수준 설정을 참조하세요.

다른 운영 체제를 실행하는 원격 컴퓨터에서 WMI에 연결할 때 보안 수준 또는 서비스를 변경하는 것이 주로 중요합니다. 자세한 내용은 다른 운영 체제 간에 연결을 참조하세요.

클라이언트 애플리케이션은 ID를 사용하여 WMI 프록시에 연결합니다. ID는 사용자 이름, 암호 및 권한 설정으로 구성된 데이터 개체입니다. WMI 클라이언트 애플리케이션의 경우 IWbemLocator::ConnectServer 인터페이스에 대한 호출은 초기 ID를 만듭니다. ConnectServer 메서드는 세 개의 매개 변수 집합에서 ID를 사용합니다. 이 매개 변수는 현재 사용자를 나타내기 위해 NULL로 설정할 수 있습니다. NULL이 아닌 매개 변수를 지정하여 특정 사용자 및 도메인을 나타낼 수도 있습니다. 호출에 성공하면 ConnectServer는 WMI 서비스 또는 Windows 운영 체제와 같은 다양한 원격 프로세스에 직접 액세스할 수 있는 포인터를 반환합니다.

많은 COM 인터페이스와 마찬가지로 ConnectServer는 프록시에 대한 포인터를 반환합니다. 프록시는 WMI 또는 원격 공급자와 같은 원격 프로세스를 나타내는 데이터 개체입니다. COM은 프록시를 사용하여 개발자가 데이터가 로컬인 것처럼 원격 데이터에 액세스할 수 있도록 합니다.

다음 WMI 인터페이스는 프록시를 사용합니다.

원격 프로세스에 대한 포인터를 받은 후 두 가지 중 하나를 수행할 수 있습니다. 프로세스가 수행하는 작업을 알고 있는 경우 포인터에 대한 보안을 설정하고 프로세스에 정상적으로 액세스하도록 선택할 수 있습니다. WMI 서비스에 대한 대부분의 포인터가 있는 경우입니다. 자세한 내용은 WMI 연결에서 보안 수준 설정을 참조하세요. 또는 프록시에서 IUnknown 인터페이스를 호출하여 IUnknown::Release와 같은 프록시의 다른 COM 인터페이스에 액세스해야 합니다.

기본값 및 권장 사항

DCOM(구성 요소 개체 모델)의 분산 버전은 기본 인증 서비스(Kerberos, NTLM 또는 Negotiate)를 협상하며 CoInitializeSecurity를 사용하여 기본 인증 서비스를 지정할 수 없습니다. CoSetProxyBlanket의 인증 서비스 매개 변수에 RPC_C_AUTHN_DEFAULT를 지정하면 DCOM에서 적절한 서비스를 선택할 수 있습니다. 원격 연결의 경우 기본 서비스는 Kerberos 및 비 Kerberos 도메인 모두에서 작동하는 애플리케이션에 권장되는 서비스인 Negotiate입니다. 로컬 연결의 경우 기본 인증 서비스는 NTLM(NT LAN Manager)입니다.

다음 코드 예제에서는 사용 중인 기본 인증 서비스를 보여 줍니다.

// The pWbemServices variable is of type IWbemServices*

HRESULT hr = CoSetProxyBlanket(
     pWbemServices,                //Proxy
     RPC_C_AUTHN_DEFAULT,          //Authentication service 
     RPC_C_AUTHZ_DEFAULT,          //Authorization service 
     COLE_DEFAULT_PRINCIPAL,       //Server principal name used 
                                       // by authentication service
     RPC_C_AUTHN_LEVEL_DEFAULT,    //Authentication level
     RPC_C_IMP_LEVEL_IMPERSONATE,  //Impersonation level
     COLE_DEFAULT_AUTHINFO,       //Client identity
     EOAC_DEFAULT                  //Capability flags
     );

이 항목의 코드 예제에는 다음 참조 및 #include 문이 필요합니다.

#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>

#pragma comment(lib, "wbemuuid.lib")

스크립팅의 경우 DCOM이 원격 호출에 대해 선택하는 기본값을 사용하는 것이 좋습니다. 로컬 컴퓨터에서는 WMI 호출에 대한 인증 서비스를 지정할 수 없습니다. 자세한 내용은 VBScript를 사용하여 인증 서비스 설정모니커 문자열 생성을 참조하세요.