이전 속성에서 새 인스턴스 만들기
조인 뷰 클래스에는 Class1.Prop1 = Class2.Prop2같은 공통 속성 값으로 연결된 원본 클래스 인스턴스의 속성이 포함됩니다. 조인 뷰 클래스의 각 인스턴스는 서로 다른 클래스 인스턴스의 부분으로 구성됩니다.
속성 값이 같지 않은 것을 기준으로 조인 뷰 클래스를 생성할 수 있습니다. 예를 들어, Class1.Prop1<>Class2.Prop2가 있으며, 이때 Prop1 및 Prop2은 뷰 클래스의 동일한 속성에 매핑되지 않습니다.
조인 보기 클래스는 찾고 있는 정보가 별도의 관련 클래스에 포함된 경우에 유용합니다. 예를 들어 프린터 및 프린터 구성에 대한 정보를 원하는 경우 Win32_Printer 클래스의 일부 속성과 Win32_PrinterConfiguration 클래스의 일부 속성을 포함하는 조인 보기 클래스를 만들 수 있습니다. 뷰 공급자가 없으면 필요한 정보를 얻으려면 별도의 인스턴스의 속성을 검색하고 병합해야 합니다.
다음 절차에서는 조인 뷰 클래스를 만드는 방법을 설명합니다.
조인 보기 클래스 만들려면
JoinOn 문자열 한정자를 사용하여 클래스 정의를 시작합니다.
JoinOn, Association및 Union 한정자는 함께 사용할 수 없습니다.
필요한 경우 PostJoinFilter 한정자를 적용하여 조인 클래스에서 원하는 인스턴스를 필터링합니다.
PostJoinFilter 공급자를 사용하면 뷰 클래스의 인스턴스를 특정 조건을 충족하는 인스턴스로 제한할 수 있습니다.
ViewSources 한정자를 사용하여 뷰 클래스의 원본 인스턴스를 정의하는 쿼리를 만듭니다.
ViewSpaces 한정자를 사용하여 원본 인스턴스가 있는 네임스페이스의 이름과 위치를 정의합니다.
PropertySources 한정자를 사용하여 조인 뷰 클래스에서 원하는 속성을 정의합니다.
속성이 동등성에 기반하여 조인 뷰에 추가될 때, 두 소스 속성을 하나의 PropertySources qualifier에서 매핑해야 합니다.
다음 코드 예제에서는 한 PropertySources 한정자에서 매핑되는 두 개의 속성을 보여 줍니다.
[PropertySources{"IDProcess", "IDProcess"}] Uint32 ProcessID;
HiddenDefault 한정자를 사용하여 원본 클래스에 속하는 속성에 태그를 지정할 수 있습니다.
다음 코드 예제에서는 ProcessID 속성에 의해 조인된 두 클래스의 속성을 사용하여 Win32_PerfRawData_PerfProc_Process 및 Win32_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;
};