Freigeben über


Schreiben eines Zuordnungsanbieters für Interoperabilität

Ein Zuordnungsanbieter bietet einen Mechanismus, mit dem sich Profile registrieren und anderen Profilen zuordnen lassen, die in verschiedenen Namespaces implementiert sind.

Zuordnungsanbieter werden verwendet, um Standardprofile wie z. B. ein Energieprofil verfügbar zu machen. Dies wird erreicht, indem ein Zuordnungsanbieter im root/interop-Namespace geschrieben wird, der durch Implementieren einer aus CIM_RegisteredProfile abgeleiteten Klasse Zuordnungsinstanzen verfügbar macht. Der Anbieter muss sowohl im root/interop- als auch im root/<implemented>-Namespace registriert sein, um ein namespaceübergreifendes Durchlaufen zu unterstützen.

Die Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) lädt den Zuordnungsanbieter jedes Mal, wenn eine Zuordnungsabfrage im root/interop-Namespace ausgeführt wird.

Implementieren eines Zuordnungsanbieters für Interoperabilität

  1. Leiten Sie eine Klasse aus CIM_RegisteredProfile ab, und erstellen Sie eine statische Instanz dieser abgeleiteten Klasse im root\interop-Namespace. Es müssen mindestens die folgenden Eigenschaften mit gültigen Werten weitergegeben werden:

    Auch wenn InstanceID die Instanz von CIM_RegisteredProfile eindeutig definiert, muss die Kombination aus RegisteredName, RegisteredOrganization und RegisteredVersion das registrierte Profil im Geltungsbereich der Organisation eindeutig identifizieren. Weitere Informationen zu den einzelnen Eigenschaften finden Sie unter CIM_RegisteredProfile.

    Das folgende Codebeispiel zeigt die Syntax für das Ableiten der ProcessProfile-Klasse aus CIM_RegisteredProfile und das Auffüllen der statischen Instanz.

    class ProcessProfile : CIM_RegisteredProfile
    {
    };
    
    instance of ProcessProfile as $PP
    {
         InstanceID = "Process";
         RegisteredName = "Process";
         RegisteredOrganization = "1"; // Set to "Other"
         OtherRegisteredOrganization = "Microsoft";
         RegisteredVersion = "1.0";
    };
    

    Hinweis

    Bei Windows-Clients muss die Eigenschaft RegisteredOrganization auf 1 und die Eigenschaft OtherRegisteredOrganization auf „Microsoft“ festgelegt werden.

     

  2. Erstellen Sie einen Anbieter, der Zuordnungsinstanzen von CIM_ElementConformsToProfile zurückgibt. Dieser Prozess umfasst zwei Schritte.

    1. Erstellen Sie sowohl im interop- als auch im implementation-Namespace eine aus CIM_ElementConformsToProfile abgeleitete Klasse. Da ein und dasselbe Profil von verschiedenen Anbietern implementiert werden kann, muss der Name der Klasse eindeutig sein. Die empfohlene Namenskonvention lautet <Organisation>_<ProductName>_<ClassName>_<Version>. Eine der beiden Eigenschaften ConformantStandard und ManagedElement muss den MSFT_TargetNamespace-Qualifizierer angeben, der den Namespace enthält, zu dem diese Klasse gehört.

      Das folgende Codebeispiel zeigt die Syntax für das Ableiten der Microsoft_Process_ElementConformsToProfile_v1-Klasse aus CIM_ElementConformsToProfile im Namespace „root\interop“. In diesem Beispiel verweist das von „Win32_Process“ verwaltete Element mithilfe des MSFT_TargetNamespace-Qualifizierers auf den Namespace „root\cimv2“.

      #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;
      };
      

      Das folgende Codebeispiel zeigt die Syntax für das Ableiten der Microsoft_Process_ElementConformsToProfile_v1-Klasse aus CIM_ElementConformsToProfile im Namespace „root\cimv2“. In diesem Beispiel verweist der mit CIM_RegisteredProfile konforme Standard mithilfe des MSFT_TargetNamespace-Qualifizierers auf den Namespace „root\interop“.

      #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;
      };
      

      Wenn der MSFT_TargetNamespace-Qualifizierer in der Eigenschaft, die auf den implementierten Namespace verweist, nicht angegeben ist, funktioniert der ResultClass-Filter der Associators of-Anweisung nicht. Ein Beispiel: Wenn der MSFT_TargetNamespace-Qualifizierer nicht angegeben ist, gibt die folgende Windows PowerShell-Befehlszeile kein Objekt zurück: get-wmiobject -query "associators of {ProcessProfile.InstanceID='Process'} where resultclass='Win32_Process'".

      Der MSFT_TargetNamespace-Qualifizierer darf nicht auf einen Namespace auf einem Remotecomputer zeigen. Der folgende Namespace wird beispielsweise nicht unterstützt: MSFT_TargetNamespace(\\\\<RemoteMachine>\\root\\interop).

    2. Schreiben Sie einen Anbieter, der Instanzen der erstellten abgeleiteten Klasse zurückgibt. Weitere Informationen finden Sie unter Schreiben eines Instanzanbieters. Wenn Sie auf namespaceübergreifende Instanzen zugreifen, müssen Sie möglicherweise auf die Sicherheitsstufen für den Client zugreifen. Weitere Informationen finden Sie unter Identitätswechsel für einen Client.

      Der Zuordnungsanbieter muss sowohl die IWbemServices.CreateInstanceEnumAsync- als auch die IWbemServices.GetObjectAsync-Methode implementieren. Die Implementierung der IWbemServices.ExecQueryAsyncMethode ist optional. Da sowohl vom root\interop- als auch vom root\<implemented>-Namespace auf diesen Anbieter zugegriffen werden kann, sollte keine explizite Abhängigkeit von einem Namespace innerhalb des Anbieters bestehen.

  3. Registrieren Sie den Zuordnungsanbieter sowohl im Namespace „root\interop“ als auch im Namespace „root\<implemented>“. Weitere Informationen finden Sie unter Registrieren eines Instanzanbieters.

    Das folgende Codebeispiel zeigt die Syntax zum Registrieren des Zuordnungsanbieters im root\interop-Namespace.

    #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;
    };
    

    Das folgende Codebeispiel zeigt die Syntax zum Registrieren des Zuordnungsanbieters im root\cimv2-Namespace.

    #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. Platzieren Sie das Schema für das CIM_ElementConformsToProfile im implemented-Namespace. Bei Windows-Clients ist dies die Datei „interop.mof“, die sich im Ordner „%systemroot%\system32\wbem“ befindet.

  5. Implementieren Sie die IWbemProviderInit-Schnittstelle für Ihren Anbieter.

    WMI verwendet IWbemProviderInit zum Laden und Initialisieren eines Anbieters. Die IWbemProviderInit.Initialize-Methode sollte auf eine Weise implementiert werden, die einen Aufruf für zwei verschiedene Namespaces ermöglicht. Weitere Informationen finden Sie unter Initialisieren eines Anbieters.

CIM_ElementConformsToProfile

CIM_RegisteredProfile

Schreiben eines Instanzanbieters

Registrieren eines Instanzanbieters