Registrera en klassprovider
Om du vill skapa en WMI-klassleverantör måste du registrera den __Win32Provider-instans som representerar din leverantör med hjälp av en instans av __ClassProviderRegistration. Som ett COM-objekt måste providern registrera sig med operativsystemet och WMI. Följande procedur förutsätter att du redan har implementerat registreringsprocessen enligt beskrivningen i Registrera en provider. Om leverantören lagrar de flesta data i WMI-lagringsplatsen och dessa data endast uppdateras vid WMI-initiering registrerar du klassen som push-klassprovider. Om de data du anger ändras ofta och hämtas dynamiskt av din kod för varje begäran från WMI, registrerar du din leverantör som en pull-klassleverantör.
Följande procedur beskriver hur du registrerar en push-klassleverantör.
Registrera en push-klassleverantör
Ange egenskapen InteractionType för __ClassProviderRegistration-instansen till 1.
Att skapa en instans av __ClassProviderRegistration är en del av registreringsprocessen.
Följande procedur beskriver hur du registrerar en pull-klassprovider.
Registrera en leverantör för pull-klass
Skapa en instans av klassen __Win32Provider som beskriver providern.
Skapa en instans av klassen __ClassProviderRegistration som beskriver providerns funktionsuppsättning.
I den __ClassProviderRegistration instansen:
Ange egenskapen InteractionType för att ange om providern är en push- eller pull-provider.
Tagga klassen med både Dynamic-kvalificerare och Provider-kvalificerare.
Dynamic-kvalificerare signalerar att WMI ska använda en leverantör för att hämta klassinstanser. Provider-kvalificeraren anger namnet på den provider som WMI ska använda.
Definiera egenskaperna ResultSetQueries, ReferencedSetQueriesoch UnsupportedQueries.
Dessa frågeegenskaper beskriver detaljerad information om klassen som stöds.
Förutom att beskriva de olika metoder som stöds för en klass har klassen __ClassProviderRegistration också tre egenskaper som beskriver en serie frågor. När de används tillsammans beskriver dessa tre egenskaper hela klassintervallet som tillhandahålls av klassprovidern. Varje frågeegenskap innehåller en WQL SELECT-instruktion, kallad "schemafråga", för att ange vilka typer av klasser som stöds. Schemafrågor anger ett särskilt klassnamn som heter meta_class. I följande tabell visas frågeegenskaperna.
Egenskap | Beskrivning |
---|---|
ResultSetQueries | Innehåller information om resultatuppsättningen som providern tillhandahåller. WMI använder informationen för att avgöra om providern ska anropas för att uppfylla en fråga från ett program. Den här egenskapen beskriver antingen uppsättningen med alla klasser som providern kan tillhandahålla eller en supermängd av de tillgängliga klasserna, men aldrig en delmängd. WMI kräver att en provider anger minst en fråga i den här egenskapen. I följande exempel visas hur du anger ResultSetQueries när en provider tillhandahåller en associationsklass som refererar till klassen Win32_LogicalDisk. SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk" I följande exempel visas hur du anger en allmän fråga när en provider tillhandahåller klasser som refererar till andra okända klasser. SELECT * FROM meta_class I följande exempel visas hur du anger ResultSetQueries när en provider endast tillhandahåller underklasser, men inte den överordnade klassen för en viss klass. SELECT * FROM meta_class WHERE __Dynasty = "MyClass" I följande exempel visas hur du använder egenskapen special __this och anger ResultSetQueries när en provider tillhandahåller alla klass- och underklasser. SELECT * FROM meta_class WHERE __this ISA "MyClass" |
Referensuppsättningsförfrågningar | Avgör om providern ska kringgås i schemafrågor där associationer och referenser begärs. Leverantörer som kan tillhandahålla associationsklasser måste inkludera minst en förfrågan i sin ReferencedSetQueries egenskap. |
Frågor stöds inte | Innehåller information om resultatuppsättningen som en klassprovider inte tillhandahåller. WMI använder den här egenskapen för att subtrahera från den uppsättning klasser som ResultSetQueries. En klassleverantör kan till exempel specificera i ResultSetQueries att stöd ges för alla klasser som härleds från MyClass och ange i UnsupportedQueries att det saknas stöd för en specifik härledd klass. Ju mer information en provider kan registrera om sina frågebearbetningsfunktioner, desto snabbare körs den. Att ange en eller flera frågor i egenskapen UnsupportedQueries är ett sätt att vara specifik och är särskilt viktigt när en provider förlitar sig på en klass som den inte tillhandahåller. När en begäran görs för en klass som visas i en fråga i egenskapen UnsupportedQueries, kan WMI ange själva klassen eller anropa en alternativ provider för att ange den. |
Eftersom WMI inte stöder OR-satsen måste du skapa en separat fråga för varje klass.
Följande frågor anges i ResultSetQueries när en klassprovider tillhandahåller MyClass1, MyClass2 och MyClass3.
SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"
Endast administratörer kan registrera eller ta bort en provider genom att skapa en instans av __Win32Provider och __ClassProviderRegistration.