다음을 통해 공유


이전 속성에서 새 인스턴스 만들기

조인 뷰 클래스에는 Class1.Prop1 = Class2.Prop2같은 공통 속성 값으로 연결된 원본 클래스 인스턴스의 속성이 포함됩니다. 조인 뷰 클래스의 각 인스턴스는 서로 다른 클래스 인스턴스의 부분으로 구성됩니다.

속성 값이 같지 않은 것을 기준으로 조인 뷰 클래스를 생성할 수 있습니다. 예를 들어, Class1.Prop1<>Class2.Prop2가 있으며, 이때 Prop1Prop2은 뷰 클래스의 동일한 속성에 매핑되지 않습니다.

조인 보기 클래스는 찾고 있는 정보가 별도의 관련 클래스에 포함된 경우에 유용합니다. 예를 들어 프린터 및 프린터 구성에 대한 정보를 원하는 경우 Win32_Printer 클래스의 일부 속성과 Win32_PrinterConfiguration 클래스의 일부 속성을 포함하는 조인 보기 클래스를 만들 수 있습니다. 뷰 공급자가 없으면 필요한 정보를 얻으려면 별도의 인스턴스의 속성을 검색하고 병합해야 합니다.

다음 절차에서는 조인 뷰 클래스를 만드는 방법을 설명합니다.

조인 보기 클래스 만들려면

  1. JoinOn 문자열 한정자를 사용하여 클래스 정의를 시작합니다.

    JoinOn, AssociationUnion 한정자는 함께 사용할 수 없습니다.

  2. 필요한 경우 PostJoinFilter 한정자를 적용하여 조인 클래스에서 원하는 인스턴스를 필터링합니다.

    PostJoinFilter 공급자를 사용하면 뷰 클래스의 인스턴스를 특정 조건을 충족하는 인스턴스로 제한할 수 있습니다.

  3. ViewSources 한정자를 사용하여 뷰 클래스의 원본 인스턴스를 정의하는 쿼리를 만듭니다.

  4. ViewSpaces 한정자를 사용하여 원본 인스턴스가 있는 네임스페이스의 이름과 위치를 정의합니다.

  5. PropertySources 한정자를 사용하여 조인 뷰 클래스에서 원하는 속성을 정의합니다.

    속성이 동등성에 기반하여 조인 뷰에 추가될 때, 두 소스 속성을 하나의 PropertySources qualifier에서 매핑해야 합니다.

    다음 코드 예제에서는 한 PropertySources 한정자에서 매핑되는 두 개의 속성을 보여 줍니다.

    [PropertySources{"IDProcess", "IDProcess"}] Uint32 ProcessID;
    

    HiddenDefault 한정자를 사용하여 원본 클래스에 속하는 속성에 태그를 지정할 수 있습니다.

다음 코드 예제에서는 ProcessID 속성에 의해 조인된 두 클래스의 속성을 사용하여 Win32_PerfRawData_PerfProc_ProcessWin32_PerfRawData_PerfProc_Thread 성능 모니터 공급자 클래스에서 만든 조인 뷰 클래스를 보여 줍니다.

#pragma namespace("\\\\.\\root\\cimv2")

instance of __Win32Provider as $DataProv
{
    Name = "MS_VIEW_INSTANCE_PROVIDER";
    ClsId = "{AA70DDF4-E11C-11D1-ABB0-00C04FD9159E}";
    ImpersonationLevel = 1;
    PerUserInitialization = "True";
    
};

instance of __InstanceProviderRegistration
{
    Provider = $DataProv;
    SupportsPut = True;
    SupportsGet = True;
    SupportsDelete = True;
    SupportsEnumeration = True;
    QuerySupportLevels = {"WQL:UnarySelect"};
};

[JoinOn("Win32_PerfRawData_PerfProc_Process.IDProcess = 
    Win32_PerfRawData_PerfProc_Thread.IDProcess"), 
ViewSources{"SELECT Name, IDProcess, PriorityBase 
    FROM Win32_PerfRawData_PerfProc_Process", 
    "SELECT Name, IDProcess, ThreadState, 
    PriorityCurrent FROM Win32_PerfRawData_PerfProc_Thread"},
ViewSpaces{"\\\\.\\root\\cimv2", "\\\\.\\root\\cimv2"},
dynamic: ToInstance, provider("MS_VIEW_INSTANCE_PROVIDER")]

class JoinedProcessThread
{
    [PropertySources{"IDProcess", "IDProcess"}] 
        Uint32 ProcessID;
    [PropertySources{"Name", ""}] 
        String PName;
    [PropertySources{"", "Name"}, key]   
        String TName;
    [PropertySources{"", "ThreadState"}] 
        Uint32 State;
    [PropertySources{"PriorityBase", ""}] 
        Uint32 BasePriority;
    [PropertySources{"", "PriorityCurrent"}] 
        Uint32 CurrentPriority;    
};