Création d’une instance à partir d’anciennes propriétés
Une classe d’affichage de jointure contient des propriétés provenant d’instances de classe source qui sont connectées par une valeur de propriété commune, telle que Class1.Prop1 = Class2.Prop2. Chaque instance d’une classe d’affichage de jointure se compose de parties d’instances de classe différentes.
Vous pouvez baser une classe d’affichage de jointure sur l’inégalité des valeurs de propriété, comme Class1.Prop1<>Class2.Prop2 où Prop1 et Prop2 ne sont pas mappés à la même propriété dans la classe d’affichage.
Une classe d’affichage de jointure est utile lorsque les informations que vous recherchez sont contenues dans des classes distinctes mais associées. Par exemple, si vous souhaitez obtenir des informations sur une imprimante et sur la configuration de l’imprimante, vous pouvez créer une classe d’affichage jointure qui contient certaines des propriétés de la classe Win32_Printer et certaines des propriétés de la classe Win32_PrinterConfiguration . Sans le fournisseur d’affichage, vous devez récupérer et fusionner les propriétés des instances distinctes pour obtenir les informations dont vous avez besoin.
La procédure suivante décrit comment créer une règle personnalisée.
Pour créer une classe d’affichage de jointure
Commencez une définition de classe avec le qualificateur de chaîne JoinOn .
Les qualificateurs JoinOn, Association, et Union s’excluent mutuellement.
Si nécessaire, filtrez les instances souhaitées dans la classe de jointure en appliquant le qualificateur PostJoinFilter .
Le fournisseur PostJoinFilter vous permet de restreindre les instances d’une classe d’affichage aux instances qui répondent à des conditions spécifiques.
Créez les requêtes qui définissent les instances sources utilisées dans la classe de vue avec le qualificateur ViewSources.
Définissez les noms et l’emplacement des espaces de noms dans lesquels se trouvent les instances sources avec le qualificateur ViewSpaces.
Définissez les propriétés souhaitées dans votre classe d’affichage avec le qualificateur PropertySources .
Lorsque des propriétés sont ajoutées à la vue de jointure en fonction de l’égalité, les deux propriétés sources doivent être mappées dans un qualificateur PropertySources.
L’exemple de code suivant montre deux propriétés qui sont mappées dans un qualificateur PropertySources.
[PropertySources{"IDProcess", "IDProcess"}] Uint32 ProcessID;
En utilisant le qualificateur HiddenDefault , vous pouvez baliser les propriétés qui appartiennent à une classe source.
L’exemple de code suivant montre une classe d’affichage de jointure créée à partir des classes de fournisseur Analyseur de performances Win32_PerfRawData_PerfProc_Process et Win32_PerfRawData_PerfProc_Thread avec les propriétés des deux classes jointes par la propriété 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;
};