Delen via


Een koppelingsprovider schrijven voor Interop

Een koppelingsprovider biedt een mechanisme voor het registreren van profielen en het koppelen van profielen die zijn geïmplementeerd in verschillende naamruimten.

Koppelingsproviders worden gebruikt om standaardprofielen beschikbaar te maken, zoals een energieprofiel. Dit wordt bereikt door een koppelingsprovider te schrijven in de hoofd-/interop-naamruimte die koppelingsexemplaren beschikbaar maakt door een klasse te implementeren die is afgeleid van CIM_RegisteredProfile. De provider moet worden geregistreerd in zowel de hoofd-/interop- als de hoofd-/<geïmplementeerd> naamruimte ter ondersteuning van traversal tussen meerdere naamruimten.

Windows Management Instrumentation (WMI) laadt de koppelingsprovider wanneer een koppelingsquery wordt uitgevoerd in de hoofd-/interop-naamruimte.

Een koppelingsprovider implementeren voor interoperabiliteit

  1. Een klasse afleiden uit CIM_RegisteredProfile en een statisch exemplaar van deze afgeleide klasse maken in de root\interop-naamruimte. De volgende eigenschappen moeten minimaal worden doorgegeven met geldige waarden:

    Hoewel InstanceID het exemplaar van de CIM_RegisteredProfileuniek definieert, moet de combinatie van RegisteredName, RegisteredOrganizationen RegisteredVersion het geregistreerde profiel uniek identificeren binnen het bereik van de organisatie. Zie CIM_RegisteredProfilevoor meer informatie over de afzonderlijke eigenschappen.

    In het volgende codevoorbeeld wordt de syntaxis beschreven voor het afleiden van de klasse ProcessProfile van CIM_RegisteredProfile en het vullen van het statische exemplaar.

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

    Notitie

    Voor Windows-clients moet de eigenschap RegisteredOrganization zijn ingesteld op 1 en de eigenschap OtherRegisteredOrganization ingesteld op Microsoft.

     

  2. Maak een provider die koppelingsexemplaren van CIM_ElementConformsToProfileretourneert. Dit is een proces in twee stappen.

    1. Maak een klasse die is afgeleid van CIM_ElementConformsToProfile in zowel de interop- als de implementatienaamruimten. Omdat hetzelfde profiel door verschillende leveranciers kan worden geïmplementeerd, moet de naam van de klasse uniek zijn. De aanbevolen naamconventie is '<Organization>_<ProductName>_<ClassName>_<Version>'. De eigenschap ConformantStandard of de eigenschap ManagedElement moet de MSFT_TargetNamespace kwalificatie opgeven die de naamruimte bevat waartoe deze klasse behoort.

      In het volgende codevoorbeeld wordt de syntaxis beschreven voor het afleiden van de Microsoft_Process_ElementConformsToProfile_v1 klasse uit CIM_ElementConformsToProfile in de hoofd-\interop-naamruimte. In dit voorbeeld verwijst het Win32_Process beheerde element naar de root\cimv2-naamruimte met behulp van de MSFT_TargetNamespace kwalificatie.

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

      In het volgende codevoorbeeld wordt de syntaxis beschreven voor het afleiden van de Microsoft_Process_ElementConformsToProfile_v1 klasse uit CIM_ElementConformsToProfile in de root\cimv2-naamruimte. In dit voorbeeld verwijst de CIM_RegisteredProfile conforme standaard naar de root\interop-naamruimte met behulp van de MSFT_TargetNamespace kwalificatie.

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

      Als de MSFT_TargetNamespace kwalificator niet is opgegeven voor de eigenschap die verwijst naar de geïmplementeerde naamruimte, werkt de ResultClass-filter van de instructie 'Associators of' niet. Als de MSFT_TargetNamespace kwalificatie bijvoorbeeld niet is opgegeven, retourneert de volgende Windows PowerShell-opdrachtregel geen object: get-wmiobject -query "associators van {ProcessProfile.InstanceID='Process'} waar resultclass='Win32_Process'".

      De MSFT_TargetNamespace kwalificatie kan niet verwijzen naar een naamruimte op een externe computer. De volgende naamruimte wordt bijvoorbeeld niet ondersteund: MSFT_TargetNamespace(\\\\<RemoteMachine>\\root\\interop).

    2. Schrijf een provider die exemplaren van de gemaakte afgeleide klasse retourneert. Zie Een exemplaarprovider schrijvenvoor meer informatie. Wanneer u toegang krijgt tot exemplaren van meerdere naamruimten, moet u mogelijk toegang krijgen tot de beveiligingsniveaus voor de client. Zie Een client-imiteren voor meer informatie.

      De koppelingsprovider moet zowel de IWbemServices.CreateInstanceEnumAsync- als IWbemServices.GetObjectAsync implementeren. Het implementeren van de methode IWbemServices.ExecQueryAsync is optioneel. Omdat deze provider toegankelijk is vanuit zowel de root\interop als de root\<geïmplementeerd> naamruimten, mag er geen expliciete afhankelijkheid zijn van een naamruimte binnen de provider.

  3. Registreer de koppelingsprovider in zowel de root\interop- als de root\<geïmplementeerde>-naamruimten. Zie Een exemplaarprovider registrerenvoor meer informatie.

    In het volgende codevoorbeeld wordt de syntaxis beschreven voor het registreren van de koppelingsprovider in de naamruimte 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;
    };
    

    In het volgende codevoorbeeld wordt de syntaxis beschreven voor het registreren van de koppelingsprovider in de naamruimte 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;
    };
    
  4. Plaats het schema voor de CIM_ElementConformsToProfile in de geïmplementeerde naamruimte. Voor Windows-clients is dit het bestand interop.mof dat zich in de map %systemroot%\system32\wbem bevindt.

  5. Implementeer de IWbemProviderInit-interface voor uw provider.

    WMI maakt gebruik van IWbemProviderInit- om een provider te laden en te initialiseren. De methode IWbemProviderInit.Initialize moet worden geïmplementeerd op een manier waarmee deze kan worden aangeroepen voor twee verschillende naamruimten. Zie Initialiseren van een providervoor meer informatie.

CIM_ElementConformsToProfile

CIM_RegisteredProfile

Een Exemplaarprovider Schrijven

Een provider van instanties registreren