Rejestrowanie dostawcy klas
Aby utworzyć dostawcę klas WMI, należy zarejestrować wystąpienie __Win32Provider, które reprezentuje dostawcę przy użyciu wystąpienia __ClassProviderRegistration. Jako obiekt COM dostawca musi zarejestrować się w systemie operacyjnym i usłudze WMI. Poniższa procedura zakłada, że proces rejestracji został już wdrożony zgodnie z opisem w Rejestrowanie dostawcy. Jeśli dostawca przechowuje większość danych w repozytorium WMI i te dane są aktualizowane tylko podczas inicjalizacji WMI, zarejestruj swoją klasę jako dostawcę klasy typu push. Jeśli dane, które udostępniasz, często się zmieniają i są pobierane dynamicznie przez twój kod przy każdym żądaniu z WMI, zarejestruj dostawcę jako dostawcę klasy ściągania.
Poniższa procedura opisuje sposób rejestrowania dostawcy usług powiadomień.
Aby zarejestrować dostawcę klas push
Ustaw właściwość InteractionType wystąpienia __ClassProviderRegistration na 1.
Tworzenie wystąpienia __ClassProviderRegistration jest częścią procesu rejestracji.
Poniższa procedura opisuje sposób rejestrowania dostawcy klasy pull.
Aby zarejestrować dostawcę klas ściągania
Utwórz wystąpienie klasy __Win32Provider, która opisuje dostawcę.
Utwórz wystąpienie klasy __ClassProviderRegistration opisujące zestaw funkcji dostawcy.
W ramach instancji __ClassProviderRegistration:
Ustaw właściwość InteractionType, aby wskazać, czy dostawca jest typu push, czy typu pull.
Oznacz klasę zarówno kwalifikatorem Dynamic, jak i Provider.
Dynamiczny kwalifikator sygnalizuje, że WMI powinien używać dostawcy do pobierania wystąpień klasy. Kwalifikator dostawcy określa nazwę dostawcy, którego WMI powinno użyć.
Zdefiniuj właściwości ResultSetQueries, ReferencedSetQueriesi UnsupportedQueries.
Te właściwości zapytania opisują szczegółowe informacje o obsługiwanej klasie.
Oprócz opisywania różnych obsługiwanych metod klasy, klasa __ClassProviderRegistration ma również trzy właściwości opisujące serię zapytań. Gdy są używane razem, te trzy właściwości opisują cały zakres klas dostarczonych przez dostawcę klas. Każda właściwość zapytania zawiera instrukcję WQL SELECT o nazwie "zapytanie schematu", aby określić typy obsługiwanych klas. Zapytania schematu określają specjalną nazwę klasy o nazwie meta_class. W poniższej tabeli wymieniono właściwości zapytania.
Własność | Opis |
---|---|
ResultSetQueries | Zawiera informacje o zestawie wyników, który dostarcza dostawca. Usługa WMI używa informacji, aby określić, czy wywołać dostawcę w celu spełnienia zapytania z aplikacji. Ta właściwość opisuje zestaw wszystkich klas, które dostawca może dostarczyć lub nadzbior dostępnych klas, ale nigdy nie jest podzbiorem. Usługa WMI wymaga od dostawcy określenia co najmniej jednego zapytania w tej właściwości. W poniższym przykładzie pokazano, jak ustawić ResultSetQueries, gdy dostawca dostarcza klasę skojarzenia odwołującą się do klasy Win32_LogicalDisk. SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk" W poniższym przykładzie pokazano, jak określić ogólne zapytanie, gdy dostawca dostarcza klasy odwołujące się do innych nieznanych klas. SELECT * FROM meta_class W poniższym przykładzie pokazano, jak ustawić ResultSetQueries, gdy dostawca dostarcza tylko podklasy, ale nie klasę nadrzędną danej klasy. SELECT * FROM meta_class WHERE __Dynasty = "MyClass" W poniższym przykładzie pokazano, jak użyć specjalnej właściwości __this i ustawić ResultSetQueries, gdy dostawca dostarcza wszystkie klasy i podklasy. SELECT * FROM meta_class WHERE __this ISA "MyClass" |
ReferencedSetQueries | Określa, czy należy pominąć dostawcę w zapytaniach schematu, w których żądane są skojarzenia i odwołania. Dostawcy, którzy mogą dostarczać klasy skojarzeń, muszą uwzględnić co najmniej jedno zapytanie w właściwości ReferencedSetQueries. |
Nieobsługiwane zapytania | Zawiera informacje o zestawie wyników, którego dostawca klas nie dostarcza. WMI używa tej właściwości do odejmowania ze zbioru klas wynikających z ResultSetQueries. Na przykład dostawca klas może określić w ResultSetQueries obsługę wszystkich klas pochodnych z klasy MyClass i określić w UnsupportedQueries brak obsługi dla jednej konkretnej klasy pochodnej. Im więcej informacji dostawca zarejestruje o swoich możliwościach przetwarzania zapytań, tym szybciej działa. Wprowadzenie co najmniej jednego zapytania we właściwości NieobsługiwaneZapytania jest jednym ze sposobów, aby być konkretnym i jest szczególnie ważne, gdy dostawca polega na klasie, której nie udostępnia. Gdy zostanie wykonane żądanie dotyczące klasy wymienionej w zapytaniu właściwości NieobsługiwaneZapytania, usługa WMI może dostarczyć samą klasę lub wywołać alternatywnego dostawcę, aby ją dostarczyć. |
Ponieważ usługa WMI nie obsługuje klauzuli OR, należy utworzyć oddzielne zapytanie dla każdej klasy.
Następujące zapytania są określone w ResultSetQueries, gdy dostawca klas dostarcza myClass1, MyClass2 i MyClass3.
SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"
Tylko administratorzy mogą zarejestrować lub usunąć dostawcę, tworząc wystąpienie __Win32Provider i __ClassProviderRegistration.