다음을 통해 공유


Interop용 연결 공급자 작성

연결 공급자는 프로필을 등록하고 다른 네임스페이스에 구현된 프로필과 연결하는 메커니즘을 제공합니다.

연결 공급자는 전원 프로필과 같은 표준 프로필을 노출하는 데 사용됩니다. 이 작업은 CIM_RegisteredProfile에서 파생된 클래스를 구현하여 연결 인스턴스를 노출하는 root/interop 네임스페이스에 연결 공급자를 작성하여 수행됩니다. 네임스페이스 간 통과를 지원하려면 root/interop 및 root/<implemented> 네임스페이스 모두에 공급자가 등록되어 있어야 합니다.

WMI(Windows Management Instrumentation)는 root/interop 네임스페이스에서 연결 쿼리가 실행될 때마다 연결 공급자를 로드합니다.

interop용 연결 공급자를 구현하려면

  1. CIM_RegisteredProfile에서 클래스를 파생하고 root\interop 네임스페이스에 이 파생 클래스의 정적 인스턴스를 만듭니다. 최소한 다음 속성이 유효한 값으로 전파되어야 합니다.

    InstanceIDCIM_RegisteredProfile의 인스턴스를 고유하게 정의하더라도 RegisteredName, RegisteredOrganization, RegisteredVersion의 조합은 조직의 범위 내에서 등록된 프로필을 고유하게 식별해야 합니다. 개별 속성에 대한 자세한 내용은 CIM_RegisteredProfile을 참조하세요.

    다음 코드 예제는 ProcessProfile 클래스를 CIM_RegisteredProfile에서 파생하고 정적 인스턴스를 채우기 위한 구문을 설명합니다.

    class ProcessProfile : CIM_RegisteredProfile
    {
    };
    
    instance of ProcessProfile as $PP
    {
         InstanceID = "Process";
         RegisteredName = "Process";
         RegisteredOrganization = "1"; // Set to "Other"
         OtherRegisteredOrganization = "Microsoft";
         RegisteredVersion = "1.0";
    };
    

    참고

    Windows 클라이언트의 경우 RegisteredOrganization 속성을 1로 설정하고 OtherRegisteredOrganization 속성을 "Microsoft"로 설정해야 합니다.

     

  2. CIM_ElementConformsToProfile의 연결 인스턴스를 반환하는 공급자를 만듭니다. 이것은 2단계 프로세스입니다.

    1. interop 및 구현 네임스페이스의 CIM_ElementConformsToProfile에서 파생되는 클래스를 만듭니다. 동일한 프로필을 다른 공급업체가 구현할 수 있으므로 클래스의 이름은 고유해야 합니다. 권장되는 명명 규칙은 "<Organization>_<ProductName>_<ClassName>_<Version>"입니다. ConformantStandard 또는 ManagedElement 속성은 이 클래스가 속한 네임스페이스를 포함하는 MSFT_TargetNamespace 한정자를 지정해야 합니다.

      다음 코드 예제는 root\interop 네임스페이스의 CIM_ElementConformsToProfile에서 Microsoft_Process_ElementConformsToProfile_v1 클래스를 파생하기 위한 구문을 설명합니다. 이 예제에서 Win32_Process 관리되는 요소는 MSFT_TargetNamespace 한정자를 사용하여 root\cimv2 네임스페이스를 참조합니다.

      #pragma namespace("\\\\.\\root\\interop")
      [Provider("ProcessAssociation"),Dynamic]
      Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile
      {
           CIM_RegisteredProfile ref ConformantStandard = $PP;
           [MSFT_TargetNamespace("root\\cimv2")]Win32_process ref ManagedElement = null;
      };
      

      다음 코드 예제는 root\cimv2 네임스페이스의 CIM_ElementConformsToProfile에서 Microsoft_Process_ElementConformsToProfile_v1 클래스를 파생하기 위한 구문을 설명합니다. 이 예제에서 CIM_RegisteredProfile 규격 표준은 MSFT_TargetNamespace 한정자를 사용하여 root\interop 네임스페이스를 참조합니다.

      #pragma namespace("\\\\.\\root\\cimv2")
      [Provider("ProcessAssociation"),Dynamic]
      Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile
      {
           [MSFT_TargetNamespace("root\\interop")] CIM_RegisteredProfile ref ConformantStandard = $PP;
           Win32_process ref ManagedElement = null;
      };
      

      구현된 네임스페이스를 참조하는 속성에 MSFT_TargetNamespace 한정자를 지정하지 않으면 "Associator of” 문의 ResultClass 필터가 작동하지 않습니다. 예를 들어 MSFT_TargetNamespace 한정자를 지정하지 않으면 다음 Windows PowerShell 명령줄이 개체를 반환하지 않습니다. get-wmiobject -query "associators of {ProcessProfile.InstanceID='Process'} where resultclass='Win32_Process'".

      MSFT_TargetNamespace 한정자는 원격 컴퓨터의 네임스페이스를 가리킬 수 없습니다. 예를 들어 다음 네임스페이스는 지원되지 않습니다. MSFT_TargetNamespace(\\\\<RemoteMachine>\\root\\interop).

    2. 생성된 파생 클래스의 인스턴스를 반환하는 공급자를 작성하세요. 자세한 내용은 인스턴트 공급자 작성을 참조하세요. 네임스페이스 간 인스턴스에 액세스하는 경우 클라이언트의 보안 수준에 액세스해야 할 수 있습니다. 자세한 내용은 클라이언트 가장을 참조하세요.

      연결 공급자는 IWbemServices.CreateInstanceEnumAsync 메서드와 IWbemServices.GetObjectAsync 메서드를 모두 구현해야 합니다. IWbemServices.ExecQueryAsync 메서드 구현은 선택 사항입니다. root\interop 네임스페이스와 root\<implemented> 네임스페이스 모두에서 이 공급자에 액세스할 수 있으므로 공급자 내에 네임스페이스에 대한 명시적 종속성이 없어야 합니다.

  3. root\interop 네임스페이스와 root\<implemented> 네임스페이스에서 연결 공급자를 등록합니다. 자세한 내용은 인스턴스 공급자 등록을 참조하세요.

    다음 코드 예제는 root\interop 네임스페이스에서 연결 공급자를 등록하는 구문을 설명합니다.

    #pragma namespace("\\\\.\\root\\interop")
    instance of __Win32Provider as $P
    {
        Name    = "ProcessAssociation" ;
        ClsId   = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}";
    } ;
    
    instance of __InstanceProviderRegistration
    {
        Provider = $P;
        SupportsPut = false;
        SupportsGet = TRUE;
        SupportsDelete = false;
        SupportsEnumeration = TRUE;
    };
    

    다음 코드 예제는 root\cimv2 네임스페이스에서 연결 공급자를 등록하는 구문을 설명합니다.

    #pragma namespace("\\\\.\\root\\cimv2")
    instance of __Win32Provider as $R
    {
        Name    = "ProcessAssociation" ;
        ClsId   = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}";
    } ;
    
    instance of __InstanceProviderRegistration
    {
        Provider = $R;
        SupportsPut = false;
        SupportsGet = TRUE;
        SupportsDelete = false;
        SupportsEnumeration = TRUE;
    };
    
  4. CIM_ElementConformsToProfile의 스키마를 구현된 네임스페이스에 배치합니다. Windows 클라이언트의 경우 %systemroot%\system32\wbem 폴더에 있는 interop.mof 파일입니다.

  5. 공급자의 IWbemProviderInit 인터페이스를 구현합니다.

    WMI는 IWbemProviderInit를 사용하여 공급자를 로드하고 초기화합니다. IWbemProviderInit.Initialize 메서드는 서로 다른 두 네임스페이스에 대해 호출될 수 있는 방식으로 구현되어야 합니다. 자세한 내용은 공급자 초기화를 참조하세요.

CIM_ElementConformsToProfile

CIM_RegisteredProfile

인스턴스 공급자 작성

인스턴스 공급자 등록