Создание нового экземпляра из старых свойств

Класс представления соединения содержит свойства из экземпляров исходного класса, соединенные общим значением свойства, например Class1.Prop1 = Class2.Prop2. Каждый экземпляр в классе представления соединения состоит из частей разных экземпляров класса.

Класс представления соединения можно основывать на неравенстве значений свойств, например Class1.Prop1<>Class2.Prop2 , где Prop1 и Prop2 не сопоставлены с одинаковым свойством в классе представления.

Класс представления соединения полезен, если ищущие сведения содержатся в отдельных, но связанных классах. Например, если вам нужны сведения о принтере и конфигурации принтера, можно создать класс представления соединения, содержащий некоторые свойства класса Win32_Printer и некоторые свойства класса Win32_PrinterConfiguration . Без поставщика представления необходимо получить и объединить свойства отдельных экземпляров, чтобы получить необходимые сведения.

В следующей процедуре описывается создание класса представления соединения.

Создание класса представления соединения

  1. Начните определение класса с квалификатора строки JoinOn .

    Квалификаторы JoinOn, Association и Union являются взаимоисключающими.

  2. При необходимости отфильтруйте нужные экземпляры в классе join, применив квалификатор PostJoinFilter .

    Поставщик PostJoinFilter позволяет ограничить экземпляры класса представления экземплярами, удовлетворяющими определенным условиям.

  3. Создайте запросы, определяющие исходные экземпляры класса представления, с помощью квалификатора ViewSources .

  4. Определите имена и расположения пространств имен, в которых находятся исходные экземпляры, с помощью квалификатора ViewSpaces .

  5. Определите нужные свойства в классе представления соединения с помощью квалификатора 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;    
};