Delen via


Een provider registreren

Voordat u uw provider implementeert, moet u eerst uw provider registreren bij WMI. Het registreren van de provider definieert het type provider en de klassen die de provider ondersteunt. WMI heeft alleen toegang tot geregistreerde providers.

Notitie

Zie Procedure: Een MI-provider registrerenvoor meer informatie over het registreren van een MI-provider.

 

U kunt uw providercode schrijven voordat u de provider registreert. Het is echter erg moeilijk om fouten op te sporen in een provider die niet is geregistreerd bij WMI. Het bepalen van de interfaces voor uw provider helpt ook om het doel en de structuur van een provider te beschrijven. Daarom helpt het registreren van uw provider u bij het ontwerpen van uw provider.

Alleen beheerders kunnen een provider registreren of verwijderen.

Een provider moet worden geregistreerd voor alle verschillende typen providerfuncties die worden uitgevoerd. Bijna alle providers leveren instanties van klassen die ze definiëren, maar ze kunnen ook eigenschapsgegevens, methoden, gebeurtenissen of klassen leveren. De provider kan ook worden geregistreerd als een gebeurtenisverbruikerprovider of een prestatiemeterprovider. Het wordt aanbevolen om alle providerfunctionaliteit in één provider te combineren in plaats van veel afzonderlijke providers voor elk type te hebben. Een voorbeeld is de System Registry-provider, die methoden en exemplaren biedt, en de schijfquotumprovider, die exemplaren, methoden en gebeurtenissen levert.

Een provider moet worden geregistreerd voor alle verschillende typen providerfuncties die worden uitgevoerd. Bijna alle providers leveren instanties van klassen die ze definiëren, maar ze kunnen ook eigenschapsgegevens, methoden, gebeurtenissen of klassen leveren. De provider kan ook worden geregistreerd als een gebeurtenisconsumentprovider of een prestatiemeterprovider.

Hetzelfde exemplaar van __Win32Provider wordt gebruikt voor elk type registratie:

Voorbeeld: Het aanmaken en registreren van een instantie van een provider

In het volgende voorbeeld ziet u een MOF-bestand waarmee een exemplaar van de System Registry-provider in de root\cimv2-naamruimte wordt gemaakt en geregistreerd. Hiermee wordt de alias $Reg aan de provider toegewezen om te voorkomen dat de lange padnaam vereist is in de instantie- en methoderegistraties. Zie Een alias makenvoor meer informatie.

// Place the Registry provider in the root\cimv2 namespace
#pragma namespace("\\\\.\\ROOT\\cimv2")

// Create an instance of __Win32Provider
instance of __Win32Provider as $Reg
{
Name = "RegProv";        
CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
HostingModel = "NetworkServiceHost:LocalServiceHost";
};

// Register as an instance provider by
// creating an instance
// of __InstanceProviderRegistration
instance of __InstanceProviderRegistration
{
 provider = $Reg;
 SupportsDelete = FALSE;
 SupportsEnumeration = TRUE;
 SupportsGet = TRUE;
 SupportsPut = TRUE;
};

// Register as a method provider by
// creating an instance
// of __MethodProviderRegistration
instance of __MethodProviderRegistration
{
 provider = $Reg;
};

// Define the StdRegProv class
[dynamic: ToInstance, provider("RegProv")]
class StdRegProv
{
[implemented, static] uint32 CreateKey(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName);
[implemented, static] uint32 DeleteKey(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName);
[implemented, static] uint32 EnumKey(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [OUT] string sNames[]);
[implemented, static] uint32 EnumValues(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [OUT] string sNames[], 
 [OUT] sint32 Types[]);
[implemented, static] uint32 DeleteValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName);
 [implemented, static] uint32 SetDWORDValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] uint32 uValue = 3);
[implemented, static] uint32 GetDWORDValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] uint32 uValue);
[implemented, static] uint32 SetStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] string sValue = "hello");
[implemented, static] uint32 GetStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [in] string sValueName, 
 [OUT] string sValue);
[implemented, static] uint32 SetMultiStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] string sValue[] = {"hello", "there"});
[implemented, static] uint32 GetMultiStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] string sValue[]);
[implemented, static] uint32 SetExpandedStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [IN] string sValue = "%path%");
[implemented, static] uint32 GetExpandedStringValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] string sValue);
[implemented, static] uint32 SetBinaryValue(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [in] string sValueName, 
 [in] uint8 uValue[] = {1, 2});
[implemented, static] uint32 GetBinaryValue(
 {IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] string sValueName, 
 [OUT] uint8 uValue[]);
[implemented, static] uint32 CheckAccess(
 [IN] uint32 hDefKey = 2147483650, 
 [IN] string sSubKeyName, 
 [IN] uint32 uRequired = 3, 
 [OUT] boolean bGranted);
};

Voorbeeld: Een provider registreren

In de volgende procedure wordt beschreven hoe u een provider registreert.

Een provider registreren

  1. Registreer de provider als com-server.

    Indien nodig moet u mogelijk registervermeldingen maken. Dit proces is van toepassing op alle COM-servers en is niet gerelateerd aan WMI. Zie de sectie COM in de documentatie van microsoft Windows Software Development Kit (SDK) voor meer informatie.

  2. Maak een MOF-bestand met exemplaren van __Win32Provider en een exemplaar van een klasse die rechtstreeks of indirect is afgeleid van __ProviderRegistration, zoals __InstanceProviderRegistration. Alleen beheerders kunnen een provider registreren of verwijderen door exemplaren van klassen te maken die zijn afgeleid van __Win32Provider of __ProviderRegistration.

  3. Stel de HostingModel in het exemplaar van __Win32Provider in volgens de waarden in Hostingmodellen.

    Notitie

    Tenzij de provider de hoge bevoegdheden van het LocalSystem-account vereist, moet de eigenschap __Win32Provider.HostingModel worden ingesteld op NetworkServiceHost. Zie Provider Hosting en Beveiligingvoor meer informatie.

     

    In het volgende MOF-voorbeeld uit het volledige voorbeeld ziet u de code waarmee een exemplaar van __Win32Providerwordt gemaakt.

    instance of __Win32Provider as $Reg
    {
    Name = "RegProv";        
    CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
    HostingModel = "NetworkServiceHost:LocalServiceHost";
    };
    
  4. Een instantie van een klasse die rechtstreeks of indirect is afgeleid van __ProviderRegistration, om de logische implementatie van de provider te beschrijven. Een provider kan worden geregistreerd voor verschillende typen functionaliteit. In het bovenstaande voorbeeld wordt RegProv geregistreerd als een instantie- en methodeprovider. Maar als RegProv de functionaliteit ondersteunt, kan deze ook worden geregistreerd als een eigenschap of gebeurtenisprovider. De volgende tabel bevat de klassen die providerfunctionaliteit registreren.

    Registratieklassen van provider Beschrijving
    __InstanceProviderRegistration Registreert een instantieprovider.
    __EventProviderRegistration Registreert een gebeurtenisprovider.
    __EventConsumerProviderRegistration Registreert een gebeurtenis-consumentprovider.
    __MethodProviderRegistration Registreert een methode-aanbieder.
    __PropertyProviderRegistration Registreert een eigenschapsprovider.

     

  5. Plaats het MOF-bestand in een permanente map.

    Normaal gesproken moet u het bestand in de installatiemap van de provider plaatsen.

  6. Compileer het MOF-bestand met mofcomp- of de IMofCompiler interface.

    Zie MOF-bestanden compilerenvoor meer informatie.

    Windows 8 en Windows Server 2012: Bij het installeren van providers behandelen zowel mofcomp- als de IMofCompiler interface de kwalificaties [Sleutel] en [Statisch] als waar als ze aanwezig zijn, ongeacht de werkelijke waarden. Andere qualifiers worden behandeld als onwaar als ze aanwezig zijn, maar niet expliciet zijn ingesteld op 'true'.

een WMI-provider ontwikkelen

Naamruimtebeveiligingsdescriptoren instellen

uw provider beveiligen