다음을 통해 공유


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

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

Prop1Prop2가 뷰 클래스의 동일한 속성에 매핑되지 않는 Class1.Prop1<>Class2.Prop2 같은 속성 값의 같지 않음을 조인 뷰 클래스의 기준으로 할 수 있습니다.

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

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

조인 뷰 클래스를 만드는 방법

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

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

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

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

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

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

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

    같음을 기준으로 속성이 조인 뷰에 추가되었다면, 두 원본 속성이 단일 PropertySources 한정자에 매핑되어야 합니다.

    다음 코드 예제에서는 하나의 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;    
};