Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bevor Sie Ihren Anbieter implementieren, sollten Sie zuerst Ihren Anbieter bei WMI registrieren. Durch die Registrierung des Anbieters wird der Anbietertyp und 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 How to: Register an MI Provider.
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 dabei, den Zweck und die Struktur eines Anbieters zu skizzieren. Die Registrierung Ihres Anbieters hilft Ihnen daher bei der Gestaltung Ihres Anbieters.
Nur Administratoren können einen Anbieter registrieren oder löschen.
Ein Anbieter muss für alle verschiedenen Anbieterfunktionen registriert sein, die er ausführt. Fast alle Anbieter stellen Instanzen von Klassen bereit, die sie definieren, aber sie können auch Eigenschaftsdaten, Methoden, Ereignisse oder Klassen bereitstellen. Der Anbieter kann auch als Anbieter für Ereignisanwender oder als Leistungsindikatoranbieter registriert werden. Es wird empfohlen, alle Anbieterfunktionen in einem Anbieter zu kombinieren, anstatt viele separate Anbieter für jeden Typ zu haben. Ein Beispiel ist der Systemregistrierungsanbieter, der Methoden und Instanzen bereitstellt, und den Datenträgerkontingentanbieter, der Instanzen, Methoden und Ereignisse bereitstellt.
Ein Anbieter muss für alle verschiedenen Anbieterfunktionen registriert sein, die er ausführt. Fast alle Anbieter stellen Instanzen von Klassen bereit, die sie definieren, aber sie können auch Eigenschaftsdaten, Methoden, Ereignisse oder Klassen bereitstellen. Der Anbieter kann auch als Anbieter für Ereignisanwender oder als Leistungsindikatoranbieter registriert werden.
Die gleiche Instanz von __Win32Provider wird für jeden Registrierungstyp verwendet:
- Registrieren eines Instanzanbieters
- Registrieren eines Klassenanbieters
- Registrieren eines Methodenanbieters
- Registrieren eines Ereignisanbieters
- Registrieren eines Ereignisanwenderanbieters
- Umwandlung eines Instanzanbieters in einen High-Performance Anbieter
Beispiel: Erstellen und Registrieren einer Instanz eines Anbieters
Das folgende Beispiel zeigt eine MOF-Datei, die eine Instanz des Systemregistrierungsanbieters im Root\cimv2-Namespace erstellt und registriert. Er weist dem Anbieter den Alias $Reg zu, um den langen Pfadnamen zu vermeiden, der in der Instanz und methodenregistrierung 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
Das folgende Verfahren beschreibt, wie ein Anbieter registriert wird.
So registrieren Sie einen Anbieter
Registrieren Sie den Anbieter als COM-Server.
Bei Bedarf müssen Sie möglicherweise Registrierungseinträge erstellen. Dieser Vorgang gilt für alle COM-Server und ist nicht mit WMI verknüpft. Weitere Informationen finden Sie im COM-Abschnitt in der Dokumentation zum Microsoft Windows Software Development Kit (SDK).
Erstellen Sie eine MOF-Datei, die Instanzen von __Win32Provider und eine Instanz einer Von __ProviderRegistration abgeleiteten Klasse enthält, z. B. __InstanceProviderRegistration. Nur Administratoren können einen Anbieter registrieren oder löschen, indem Instanzen von Klassen erstellt werden, die von __Win32Provider oder __ProviderRegistration abgeleitet sind.
Legen Sie das HostingModel in der Instanz von __Win32Provider entsprechend den Werten in Hostingmodellen fest.
Hinweis
Sofern der Anbieter nicht die hohen Berechtigungen des LocalSystem-Kontos erfordert, sollte die Eigenschaft __Win32Provider.HostingModel auf "NetworkServiceHost" festgelegt werden. Weitere Informationen finden Sie unter Provider Hosting and Security.
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"; };Eine Instanz einer Klasse, die entweder direkt oder indirekt von __ProviderRegistration abgeleitet wurde, 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 Eigenschafts- oder Ereignisanbieter registriert werden. In der folgenden Tabelle sind die Klassen aufgeführt, die die Anbieterfunktionalität registrieren.
Anbieterregistrierungsklassen BESCHREIBUNG __InstanceProviderRegistration Registriert einen Instanzanbieter. __EventProviderRegistration Registriert einen Ereignisanbieter. __EventConsumerProviderRegistration Registriert einen Ereignisanwenderanbieter. __MethodProviderRegistration Registriert einen Methodenanbieter. __PropertyProviderRegistration Registriert einen Eigenschaftenanbieter. Platzieren Sie die MOF-Datei in einem permanenten Verzeichnis.
In der Regel sollten Sie die Datei im Installationsverzeichnis des Anbieters platzieren.
Kompilieren Sie die MOF-Datei mit mofcomp oder der IMofCompiler-Schnittstelle .
Weitere Informationen finden Sie unter Kompilieren von MOF-Dateien.
Windows 8 und Windows Server 2012: Bei der Installation von Anbietern behandeln mofcomp und die IMofCompiler-Schnittstelle die [Key]- und [Static]-Qualifizierer als "true", wenn sie vorhanden sind, unabhängig von ihren tatsächlichen Werten. Andere Qualifizierer werden als "false" behandelt, wenn sie vorhanden, aber nicht explizit auf "true" festgelegt sind.
Zugehörige Themen