Создание нового экземпляра из старых свойств
Класс представления соединения содержит свойства из экземпляров исходного класса, соединенные общим значением свойства, например Class1.Prop1 = Class2.Prop2. Каждый экземпляр в классе представления соединения состоит из частей разных экземпляров класса.
Класс представления соединения можно основывать на неравенстве значений свойств, например Class1.Prop1<>Class2.Prop2 , где Prop1 и Prop2 не сопоставлены с одинаковым свойством в классе представления.
Класс представления соединения полезен, если ищущие сведения содержатся в отдельных, но связанных классах. Например, если вам нужны сведения о принтере и конфигурации принтера, можно создать класс представления соединения, содержащий некоторые свойства класса Win32_Printer и некоторые свойства класса Win32_PrinterConfiguration . Без поставщика представления необходимо получить и объединить свойства отдельных экземпляров, чтобы получить необходимые сведения.
В следующей процедуре описывается создание класса представления соединения.
Создание класса представления соединения
Начните определение класса с квалификатора строки JoinOn .
Квалификаторы JoinOn, Association и Union являются взаимоисключающими.
При необходимости отфильтруйте нужные экземпляры в классе join, применив квалификатор PostJoinFilter .
Поставщик PostJoinFilter позволяет ограничить экземпляры класса представления экземплярами, удовлетворяющими определенным условиям.
Создайте запросы, определяющие исходные экземпляры класса представления, с помощью квалификатора ViewSources .
Определите имена и расположения пространств имен, в которых находятся исходные экземпляры, с помощью квалификатора ViewSpaces .
Определите нужные свойства в классе представления соединения с помощью квалификатора PropertySources .
При добавлении свойств в представление соединения на основе равенства два исходных свойства должны быть сопоставлены в одном квалификаторе PropertySources .
В следующем примере кода показаны два свойства, сопоставленные в одном квалификаторе PropertySources .
[PropertySources{"IDProcess", "IDProcess"}] Uint32 ProcessID;
С помощью квалификатора HiddenDefault можно пометить свойства, принадлежащие исходному классу.
В следующем примере кода показан класс представления соединения, созданный из классов поставщика Монитор производительности Win32_PerfRawData_PerfProc_Process и Win32_PerfRawData_PerfProc_Thread со свойствами обоих классов, объединенных свойством ProcessID.
#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;
};