Registrieren eines Klassenanbieters
Um einen WMI-Klassenanbieter zu erstellen, musst du die __Win32Provider-Instanz, die deinen Anbieter darstellt, mithilfe der Instanz von __ClassProviderRegistration registrieren. Als COM-Objekt muss sich dein Anbieter bei Betriebssystem und WMI registrieren. Beim folgenden Verfahren wird davon ausgegangen, dass du den Registrierungsprozess bereits implementiert hast, wie unter Registrieren eines Anbieters beschrieben. Wenn dein Anbieter die meisten Daten im WMI-Repository speichert, und diese Daten nur bei der WMI-Initialisierung aktualisiert werden, registriere deine Klasse als Pushklassenanbieter. Wenn sich die von dir bereitgestellten Daten häufig ändern und dynamisch bei jeder Anforderung von WMI von deinem Code abgerufen werden, registriere deinen Anbieter als Pullklassenanbieter.
Im folgenden Verfahren wird beschrieben, wie du einen Pushklassenanbieter registrierst.
So registrierst du einen Pushklassenanbieter
Lege die InteractionType-Eigenschaft der __ClassProviderRegistration-Instanz auf 1 fest.
Das Erstellen einer Instanz von __ClassProviderRegistration ist Teil des Registrierungsprozesses.
Im folgenden Verfahren wird beschrieben, wie du einen Pullklassenanbieter registrierst.
So registrierst du einen Pullklassenanbieter
Erstelle eine Instanz der __Win32Provider-Klasse, die den Anbieter beschreibt.
Erstelle eine Instanz der __ClassProviderRegistration-Klasse, die den Funktionsumfang des Anbieters beschreibt.
Innerhalb der __ClassProviderRegistration-Instanz:
Lege die InteractionType-Eigenschaft fest, um anzugeben, ob der Anbieter ein Push- oder Pullanbieter ist.
Markiere die Klasse sowohl mit dem Qualifizier Dynamisch als auch dem Qualifizier Anbieter.
Der Qualifizierer Dynamisch signalisiert, dass WMI einen Anbieter verwenden sollte, um die Klasseninstanzen abzurufen. Der Qualifizierer Anbieter gibt den Namen des Anbieters an, den WMI verwenden soll.
Definiere die Eigenschaften ResultSetQueries, ReferencedSetQueries und UnsupportedQueries.
Diese Abfrageeigenschaften liefern detaillierte Informationen zur unterstützten Klasse.
Zusätzlich zur Beschreibung der verschiedenen unterstützten Methoden einer Klasse verfügt die __ClassProviderRegistration-Klasse auch über drei Eigenschaften, die eine Reihe von Abfragen beschreiben. Wenn sie zusammen verwendet werden, beschreiben diese drei Eigenschaften den gesamten Bereich von Klassen, die vom Klassenanbieter bereitgestellt werden. Jede Abfrageeigenschaft enthält eine WQL SELECT-Anweisung, die als „Schemaabfrage“ bezeichnet wird, um die Typen der unterstützten Klassen anzugeben. Schemaabfragen geben einen speziellen Klassennamen namens „meta_class“ an. Die folgende Tabelle listet die Abfrageeigenschaften auf.
Eigenschaft | BESCHREIBUNG |
---|---|
ResultSetQueries | Enthält Informationen zum Resultset, das der Anbieter bereitstellt. WMI verwendet die Informationen, um zu bestimmen, ob der Anbieter aufgerufen werden soll, um eine Abfrage von einer Anwendung zu erfüllen. Diese Eigenschaft beschreibt entweder den Satz aller Klassen, die der Anbieter bereitstellen kann, oder eine Obermenge der verfügbaren Klassen, aber niemals eine Teilmenge. WMI erfordert, dass ein Anbieter mindestens eine Abfrage in dieser Eigenschaft angibt. Das folgende Beispiel zeigt, wie ResultSetQueries festgelegt wird, wenn ein Anbieter eine Zuordnungsklasse bereitstellt, die auf die Win32_LogicalDisk-Klasse verweist. SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk" Das folgende Beispiel zeigt, wie eine allgemeine Abfrage angegeben wird, wenn ein Anbieter Klassen bereitstellt, die auf andere unbekannte Klassen verweisen. SELECT * FROM meta_class Das folgende Beispiel zeigt, wie ResultSetQueries festgelegt wird, wenn ein Anbieter nur Unterklassen, aber nicht die übergeordnete Klasse einer bestimmten Klasse bereitstellt. SELECT * FROM meta_class WHERE __Dynasty = "MyClass" Das folgende Beispiel zeigt, wie du die spezielle __this-Eigenschaft verwendest und ResultSetQueries festlegst, wenn ein Anbieter alle Klassen und Unterklassen bereitstellt. SELECT * FROM meta_class WHERE __this ISA "MyClass" |
ReferencedSetQueries | Bestimmt, ob der Anbieter in Schemaabfragen umgangen werden soll, bei denen Zuordnungen und Verweise angefordert werden. Anbieter, die Zuordnungsklassen bereitstellen können, müssen mindestens eine Abfrage in ihre ReferencedSetQueries-Eigenschaft einschließen. |
UnsupportedQueries | Enthält Informationen zum Resultset, die von einem Klassenanbieter nicht bereitgestellt werden. WMI verwendet diese Eigenschaft zur Subtraktion von dem Satz von Klassen, die durch ResultSetQueries einbezogen werden. Beispielsweise kann ein Klassenanbieter in ResultSetQueries Unterstützung für alle von MyClass abgeleiteten Klassen angeben und in UnsupportedQueries einen Mangel an Unterstützung für eine bestimmte abgeleitete Klasse angeben. Je mehr Informationen ein Anbieter zu seinen Abfrageverarbeitungsfunktionen registrieren kann, desto schneller wird die Abfrage ausgeführt. Die Eingabe einer oder mehrerer Abfragen in die UnsupportedQueries-Eigenschaft ist eine Möglichkeit für spezifische Angaben, und besonders wichtig, wenn ein Anbieter auf einer Klasse basiert, die er nicht bereitstellt. Wenn eine Anforderung für eine Klasse gestellt wird, die in einer Abfrage in der UnsupportedQueries-Eigenschaft aufgeführt ist, kann WMI die Klasse selbst angeben oder einen alternativen Anbieter aufrufen, um sie anzugeben. |
Da WMI die OR-Klausel nicht unterstützt, musst du für jede Klasse eine separate Abfrage erstellen.
Die folgenden Abfragen werden in ResultSetQueries angegeben, wenn ein Klassenanbieter MyClass1, MyClass2 und MyClass3 bereitstellt.
SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"
Nur Administratoren können einen Anbieter registrieren oder löschen, indem sie eine Instanz von __Win32Provider und __ClassProviderRegistration erstellen.