前のプロパティから新しいインスタンスを作成する
結合ビュー クラスには、共通のプロパティ値 (Class1.Prop1 = Class2.Prop2 など) によって接続されているソース クラス インスタンスのプロパティが含まれます。 結合ビュー クラス内の各インスタンスは、異なるクラス インスタンスの部分で構成されます。
Prop1 と Prop2 がビュー クラス内の同じプロパティにマップされない Class1.Prop1<>Class2.Prop2 など、プロパティ値が等しくないかどうかに基づいて結合ビュー クラスを作成できます。
結合ビュー クラスは、探している情報が個別の関連するクラスに含まれている場合に役立ちます。 たとえば、プリンターとプリンターの構成に関する情報が必要な場合は、Win32_Printer クラスのプロパティの一部と Win32_PrinterConfiguration クラスのプロパティの一部を含む結合ビュー クラスを作成できます。 ビュー プロバイダーを使用しない場合は、必要な情報を取得するために、個別のインスタンスのプロパティを取得してマージする必要があります。
以下の手順では、結合ビュー クラスを作成する方法について説明します。
結合ビュー クラスを作成するには
JoinOn 文字列修飾子を使用してクラス定義を開始します。
JoinOn、Association、Union の各修飾子は相互に排他的です。
必要に応じて、PostJoinFilter 修飾子を適用して、結合クラスで必要なインスタンスをフィルター処理します。
PostJoinFilter プロバイダーを使用すると、ビュー クラスのインスタンスを、特定の条件を満たすインスタンスに制限できます。
ViewSources 修飾子を使用して、ビュー クラスのソース インスタンスを定義するクエリを作成します。
ViewSpaces 修飾子を使用して、ソース インスタンスが配置されている名前空間の名前と場所を定義します。
PropertySources 修飾子を使用して、結合ビュー クラスで必要なプロパティを定義します。
等しいかどうかに基づいてプロパティを結合ビューに追加する場合、2 つのソース プロパティを 1 つの PropertySources 修飾子にマップする必要があります。
次のコード例は、1 つの PropertySources 修飾子にマップされる 2 つのプロパティを示しています。
[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;
};