Écriture d’un fournisseur d’association pour l’interopérabilité

Un fournisseur d’associations fournit un mécanisme permettant d’inscrire des profils et de les associer à des profils qui sont implémentés dans différents espaces de noms.

Les fournisseurs d’associations sont utilisés pour exposer des profils standard, comme un profil d’alimentation. Pour ce faire, vous devez écrire un fournisseur d’association dans l’espace de noms racine/Interop qui expose des instances d’association en implémentant une classe dérivée de CIM _ RegisteredProfile. Le fournisseur doit être inscrit à la fois dans la racine/l’interopérabilité et dans l' < > espace de noms racine/implémenté pour prendre en charge la traversée d’espaces de noms croisés.

Windows WMI (Management Instrumentation) charge le fournisseur d’associations chaque fois qu’une requête d’association est exécutée dans l’espace de noms racine/Interop.

Pour implémenter un fournisseur d’association pour l’interopérabilité

  1. Dérivez une classe de CIM _ RegisteredProfile et créez une instance statique de cette classe dérivée dans l' \ espace de noms Interop racine. 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 de l' _ RegisteredProfile CIM, la combinaison de RegisteredName, RegisteredOrganization et RegisteredVersion doit identifier de façon unique le profil inscrit dans l’étendue de l’organisation. Pour plus d’informations sur les propriétés individuelles, voir CIM _ RegisteredProfile.

    L’exemple de code suivant décrit la syntaxe pour la dérivation de la classe ProcessProfile à partir de CIM _ RegisteredProfile et le remplissage de l’instance statique.

    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 avoir la valeur 1 et la propriété OtherRegisteredOrganization définie sur « Microsoft ».

  2. Créez un fournisseur qui retourne les instances d’association des _ ElementConformsToProfile CIM. Il s’agit d’un processus en deux étapes.

    1. Créez une classe dérivée de CIM _ ElementConformsToProfile dans les espaces de noms Interop et implementation. Étant donné que le même profil peut être implémenté par des fournisseurs différents, le nom de la classe doit être unique. La Convention d’affectation de noms recommandée est « < Organization > _ < ProductName > _ < className > _ < version > ». La propriété ConformantStandard ou propriété ManagedElement doit spécifier le qualificateur _ targetNamespace de msft contenant 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 de CIM _ ElementConformsToProfile dans l' \ espace de noms Interop racine. Dans cet exemple, l' _ élément géré par le processus Win32 fait référence à l' \ espace de noms CIMV2 racine à l’aide du qualificateur _ targetNamespace de msft .

      #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 de CIM _ ElementConformsToProfile dans l' \ espace de noms CIMV2 racine. Dans cet exemple, la norme CIM _ RegisteredProfile conforme fait référence à l' \ espace de noms Interop racine à l’aide du qualificateur _ targetNamespace de msft .

      #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 _ targetNamespace de msft 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 _ TargetNamespace de MSFT n’est pas spécifié, la ligne de commande Windows PowerShell suivante ne retourne pas d’objet : obtenir-wmiobject-query "associators of {ProcessProfile. InstanceID = 'process'} where resultclass = 'Win32 _ Process'.

      Le qualificateur _ targetNamespace de msft 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).

    2. É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 à des instances de plusieurs 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’associations doit implémenter à la fois 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 à la fois à partir de l' \ interopérabilité racine et des \ < espaces de noms implémentés racine > , il ne doit pas exister de dépendance explicite sur un espace de noms à l’intérieur du fournisseur.

  3. Inscrivez le fournisseur d’associations à la fois dans l' \ interopérabilité racine et dans les \ < espaces de noms implémentés racine > . Pour plus d’informations, consultez inscription d’un fournisseur d’instances.

    L’exemple de code suivant décrit la syntaxe permettant d’inscrire le fournisseur d’associations dans l' \ espace de noms Interop racine.

    #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’associations dans l' \ espace de noms CIMV2 racine.

    #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;
    };
    
  4. Placez le schéma pour le _ ElementConformsToProfile CIM dans l’espace de noms implémenté. pour Windows clients, il s’agit du fichier interop. mof qui se trouve dans le dossier% systemroot% \ system32 \ wbem.

  5. 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 d’une manière qui lui permet d’être appelée pour deux espaces de noms différents. Pour plus d’informations, consultez initialisation d’un fournisseur.

_ELEMENTCONFORMSTOPROFILE CIM

_REGISTEREDPROFILE CIM

Écriture d’un fournisseur d’instances

Inscription d’un fournisseur d’instances