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