Écriture d’un fournisseur d’association pour l’interopérabilité
Un fournisseur d’association fournit un mécanisme pour inscrire des profils et les associer à des profils implémentés dans différents espaces de noms.
Les fournisseurs d’association sont utilisés pour exposer des profils standard, comme un profil d’alimentation. Pour ce faire, écrivez un fournisseur d’association dans l’espace de noms racine/interopérabilité qui expose les instances d’association en implémentant une classe dérivée de CIM_RegisteredProfile. Le fournisseur doit être inscrit à la fois dans l’espace de noms racine/interopérabilité et dans l’espace de noms racine/<implémenté pour prendre en> charge la traversée entre espaces de noms.
Windows Management Instrumentation (WMI) charge le fournisseur d’association chaque fois qu’une requête d’association est exécutée dans l’espace de noms racine/interopérabilité.
Écriture d’un fournisseur d’association pour l’interopérabilité
Dérivez une classe de CIM_RegisteredProfile et créez une instance statique de cette classe dérivée dans l’espace de noms root\interop. Au minimum, les propriétés suivantes doivent être propagées avec des valeurs valides :
Même si InstanceID définit de manière unique l’instance du CIM_RegisteredProfile, la combinaison de RegisteredName, RegisteredOrganizationet RegisteredVersion doit identifier de manière unique le profil inscrit dans l’étendue de l’organisation. Pour plus d’informations sur les propriétés individuelles, consultez CIM_RegisteredProfile.
L’exemple de code suivant décrit la syntaxe permettant de dériver la classe ProcessProfile de CIM_RegisteredProfile et de remplir les instance statiques.
class ProcessProfile : CIM_RegisteredProfile { }; instance of ProcessProfile as $PP { InstanceID = "Process"; RegisteredName = "Process"; RegisteredOrganization = "1"; // Set to "Other" OtherRegisteredOrganization = "Microsoft"; RegisteredVersion = "1.0"; };
Notes
Pour les clients Windows, la propriété RegisteredOrganization doit être définie sur 1 et la propriété OtherRegisteredOrganization définie sur « Microsoft ».
Créez un fournisseur qui retourne des instances d’association de CIM_ElementConformsToProfile. Il s’agit d’un processus en deux étapes.
Créez une classe dérivée de CIM_ElementConformsToProfile dans les espaces de noms d’interopérabilité et d’implémentation. Étant donné que le même profil peut être implémenté par différents fournisseurs, le nom de la classe doit être unique. La convention de nommage recommandée est "<Organization>_<ProductName>_<ClassName>_<Version>". La propriété ConformantStandard ou ManagedElement doit spécifier le qualificateur MSFT_TargetNamespace qui contient l’espace de noms auquel appartient cette classe.
L’exemple de code suivant décrit la syntaxe permettant de dériver la classe Microsoft_Process_ElementConformsToProfile_v1 à partir de CIM_ElementConformsToProfile dans l’espace de noms root\interop. Dans cet exemple, l’élément managé Win32_Process fait référence à l’espace de noms root\cimv2 à l’aide du qualificateur MSFT_TargetNamespace.
#pragma namespace("\\\\.\\root\\interop") [Provider("ProcessAssociation"),Dynamic] Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile { CIM_RegisteredProfile ref ConformantStandard = $PP; [MSFT_TargetNamespace("root\\cimv2")]Win32_process ref ManagedElement = null; };
L’exemple de code suivant décrit la syntaxe permettant de dériver la classe Microsoft_Process_ElementConformsToProfile_v1 à partir de CIM_ElementConformsToProfile dans l’espace de noms root\cimv2. Dans cet exemple, la norme CIM_RegisteredProfile conforme fait référence à l’espace de noms root\interop à l’aide du qualificateur MSFT_TargetNamespace.
#pragma namespace("\\\\.\\root\\cimv2") [Provider("ProcessAssociation"),Dynamic] Class Microsoft_Process_ElementConformsToProfile_v1: CIM_ElementConformsToProfile { [MSFT_TargetNamespace("root\\interop")] CIM_RegisteredProfile ref ConformantStandard = $PP; Win32_process ref ManagedElement = null; };
Si le qualificateur MSFT_TargetNamespace n’est pas spécifié sur la propriété qui fait référence à l’espace de noms implémenté, le filtre ResultClass de l’instruction « Associateurs de » ne fonctionnera pas. Par exemple, si le qualificateur MSFT_TargetNamespace n’est pas spécifié, la ligne de commande Windows PowerShell suivante ne retourne pas d’objet : get-wmiobject -query " associateurs de {ProcessProfile.InstanceID='Process'} où resultclass='Win32_Process' ».
Le qualificateur MSFT_TargetNamespace ne peut pas pointer vers un espace de noms sur un ordinateur distant. Par exemple, l’espace de noms suivant n’est pas pris en charge : MSFT_TargetNamespace(\\\\<RemoteMachine>\\root\\interop).
Écrivez un fournisseur qui retourne des instances de la classe dérivée créée. Pour plus d’informations, consultez Écriture d’un fournisseur d’instances. Lorsque vous accédez à plusieurs instances d’espaces de noms, vous devrez peut-être accéder aux niveaux de sécurité du client. Pour plus d’informations, consultez Emprunt d’identité d’un client.
Le fournisseur d’association doit implémenter les méthodes IWbemServices.CreateInstanceEnumAsync et IWbemServices.GetObjectAsync . L’implémentation de la méthode IWbemServices.ExecQueryAsync est facultative. Étant donné que ce fournisseur est accessible à partir des espaces de noms root\interop et root\<implémentés> , il ne doit pas y avoir de dépendance explicite sur un espace de noms à l’intérieur du fournisseur.
Inscrivez le fournisseur d’association dans les espaces de noms root\interop et root\<implémentés> . Pour plus d’informations, consultez Inscription d’un fournisseur d’instance.
L’exemple de code suivant décrit la syntaxe permettant d’inscrire le fournisseur d’association dans l’espace de noms root\interop.
#pragma namespace("\\\\.\\root\\interop") instance of __Win32Provider as $P { Name = "ProcessAssociation" ; ClsId = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}"; } ; instance of __InstanceProviderRegistration { Provider = $P; SupportsPut = false; SupportsGet = TRUE; SupportsDelete = false; SupportsEnumeration = TRUE; };
L’exemple de code suivant décrit la syntaxe permettant d’inscrire le fournisseur d’association dans l’espace de noms root\cimv2.
#pragma namespace("\\\\.\\root\\cimv2") instance of __Win32Provider as $R { Name = "ProcessAssociation" ; ClsId = "{DA13393B-A2D5-4BAC-9BD2-30B092E9EBB8}"; } ; instance of __InstanceProviderRegistration { Provider = $R; SupportsPut = false; SupportsGet = TRUE; SupportsDelete = false; SupportsEnumeration = TRUE; };
Placez le schéma du CIM_ElementConformsToProfile dans l’espace de noms implémenté. Pour les clients Windows, il s’agit du fichier interop.mof qui se trouve dans le dossier %systemroot%\system32\wbem.
Implémentez l’interface IWbemProviderInit pour votre fournisseur.
WMI utilise IWbemProviderInit pour charger et initialiser un fournisseur. La méthode IWbemProviderInit.Initialize doit être implémentée de manière à permettre son appel pour deux espaces de noms différents. Pour plus d'informations, voir Initialisation d'un fournisseur.
Rubriques connexes