Registrieren eines Anbieters

Bevor Sie Ihren Anbieter implementieren, sollten Sie zuerst Ihren Anbieter bei WMI registrieren. Durch das Registrieren des Anbieters werden der zu verwendende Anbietertyp sowie die vom Anbieter unterstützten Klassen definiert. WMI kann nur auf registrierte Anbieter zugreifen.

Hinweis

Weitere Informationen zum Registrieren eines MI-Anbieters finden Sie unter Vorgehensweise: Registrieren eines MI-Anbieters.

 

Sie können Ihren Anbietercode schreiben, bevor Sie den Anbieter registrieren. Es ist jedoch sehr schwierig, einen Anbieter zu debuggen, der nicht bei WMI registriert ist. Die Bestimmung der Schnittstellen für Ihren Anbieter hilft auch, den Zweck und die Struktur eines Anbieters zu beschreiben. Daher hilft Ihnen die Registrierung Ihres Anbieters bei der Gestaltung Ihres Anbieters.

Nur Administratoren können einen Anbieter registrieren oder löschen.

Ein Anbieter muss für alle verschiedenen Typen von Anbieterfunktionen registriert sein, die er ausführt. Fast alle Anbieter stellen Instanzen von Klassen bereit, die sie definieren, aber sie können auch Eigenschaftendaten, Methoden, Ereignisse oder Klassen bereitstellen. Der Anbieter kann auch als Ereignisverbraucheranbieter oder Als Leistungsindikatoranbieter registriert sein. Es wird empfohlen, alle Anbieterfunktionen in einem Anbieter zu kombinieren, anstatt mehrere separate Anbieter für jeden Typ zu verwenden. Ein Beispiel ist der Systemregistrierungsanbieter, der Methoden und Instanzen bereitstellt, und der Datenträgerkontingentanbieter, der Instanzen, Methoden und Ereignisse bereitstellt.

Ein Anbieter muss für alle verschiedenen Typen von Anbieterfunktionen registriert sein, die er ausführt. Fast alle Anbieter stellen Instanzen von Klassen bereit, die sie definieren, aber sie können auch Eigenschaftendaten, Methoden, Ereignisse oder Klassen bereitstellen. Der Anbieter kann auch als Ereignisverbraucheranbieter oder Als Leistungsindikatoranbieter registriert sein.

Die gleiche Instanz von __Win32Provider wird für jeden Registrierungstyp verwendet:

Beispiel: Erstellen und Registrieren einer Instanz eines Anbieters

Das folgende Beispiel zeigt eine MOF-Datei, die eine Instanz des Systemregistrierungsanbieters im Namespace root\cimv2 erstellt und registriert. Es weist dem Anbieter den Alias $Reg zu, um den langen Pfadnamen zu vermeiden, der in den Instanz- und Methodenregistrierungen erforderlich ist. Weitere Informationen finden Sie unter Erstellen eines Alias.

// 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);
};

Beispiel: Registrieren eines Anbieters

Im folgenden Verfahren wird beschrieben, wie Sie einen Anbieter registrieren.

So registrieren Sie einen Anbieter

  1. Registrieren Sie den Anbieter als COM-Server.

    Bei Bedarf müssen Sie möglicherweise Registrierungseinträge erstellen. Dieser Prozess gilt für alle COM-Server und hat nichts mit WMI zu tun. Weitere Informationen finden Sie im Abschnitt COM in der Dokumentation zum Microsoft Windows Software Development Kit (SDK).

  2. Erstellen Sie eine MOF-Datei, die Instanzen von __Win32Provider und eine Instanz einer Klasse enthält, die entweder direkt oder indirekt von __ProviderRegistration abgeleitet wird, z. B. __InstanceProviderRegistration. Nur Administratoren können einen Anbieter registrieren oder löschen, indem Sie Instanzen von Klassen erstellen, die von __Win32Provider oder __ProviderRegistration abgeleitet sind.

  3. Legen Sie das HostingModel in der Instanz von __Win32Provider entsprechend den Werten in Hostingmodellen fest.

    Hinweis

    Sofern der Anbieter nicht die hohen Berechtigungen des Kontos LocalSystem erfordert, sollte die Eigenschaft __Win32Provider.HostingModel auf "NetworkServiceHost" festgelegt werden. Weitere Informationen finden Sie unter Anbieterhosting und -sicherheit.

     

    Das folgende MOF-Beispiel aus dem vollständigen Beispiel zeigt den Code, der eine Instanz von __Win32Provider erstellt.

    instance of __Win32Provider as $Reg
    {
    Name = "RegProv";        
    CLSID = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
    HostingModel = "NetworkServiceHost:LocalServiceHost";
    };
    
  4. Eine Instanz einer Klasse, die entweder direkt oder indirekt von __ProviderRegistration abgeleitet wird, um die logische Implementierung des Anbieters zu beschreiben. Ein Anbieter kann für verschiedene Arten von Funktionen registriert werden. Im obigen Beispiel wird RegProv als Instanz- und Methodenanbieter registriert. Wenn RegProv jedoch die Funktionalität unterstützt, kann es auch als Eigenschaft oder Ereignisanbieter registriert werden. In der folgenden Tabelle sind die Klassen aufgeführt, die die Anbieterfunktionalität registrieren.

    Klassen der Anbieterregistrierung BESCHREIBUNG
    __InstanceProviderRegistration Registriert einen Instanzanbieter.
    __EventProviderRegistration Registriert einen Ereignisanbieter.
    __EventConsumerProviderRegistration Registriert einen Ereignisconsumeranbieter.
    __MethodProviderRegistration Registriert einen Methodenanbieter.
    __PropertyProviderRegistration Registriert einen Eigenschaftenanbieter.

     

  5. Platzieren Sie die MOF-Datei in einem permanenten Verzeichnis.

    In der Regel sollten Sie die Datei im Installationsverzeichnis des Anbieters ablegen.

  6. Kompilieren Sie die MOF-Datei mithilfe von mofcomp oder der Schnittstelle IMofCompiler.

    Weitere Informationen finden Sie unter Kompilieren von MOF-Dateien.

    Windows 8 und Windows Server 2012: Bei der Installation von Anbietern behandeln sowohl mofcomp als auch die Schnittstelle IMofCompiler die Qualifizierer [Key] und [Static] als true, wenn sie vorhanden sind, unabhängig von ihren tatsächlichen Werten. Andere Qualifizierer werden als false behandelt, wenn sie vorhanden sind, aber nicht explizit auf true festgelegt.

Entwickeln eines WMI-Anbieters

Festlegen von Sicherheitsbeschreibungen für Namespaces

Schützen Ihres Anbieters