Registrazione di un fornitore di classi
Per creare un provider di classi WMI, è necessario registrare l'istanza di __Win32Provider che rappresenta il provider usando un'istanza di __ClassProviderRegistration. Come oggetto COM, il provider deve registrarsi con il sistema operativo e WMI. La procedura seguente presuppone che il processo di registrazione sia già stato implementato come descritto in Registrazione di un provider. Se il provider archivia la maggior parte dei dati nel repository WMI e tali dati vengono aggiornati solo durante l'inizializzazione WMI, registrare la classe come provider di classi push. Se i dati che si forniscono cambiano frequentemente e vengono recuperati dinamicamente dal codice in ogni richiesta di WMI, registrare il provider come provider per le classi pull.
La procedura seguente descrive come registrare un provider di classi push.
Per registrare un provider di classi push
Impostare la proprietà InteractionType dell'istanza di __ClassProviderRegistration su 1.
La creazione di un'istanza di __ClassProviderRegistration fa parte del processo di registrazione.
La procedura seguente descrive come registrare un provider di classi pull.
Per registrare un provider di classi pull
Creare un'istanza della classe __Win32Provider che descrive il provider.
Creare un'istanza della classe __ClassProviderRegistration che descrive il set di funzionalità del provider.
All'interno dell'istanza di __ClassProviderRegistration:
Impostare la proprietà InteractionType per indicare se il provider è un provider push o pull.
Contrassegna la classe con i qualificatori dinamici e i qualificatori provider .
Il qualificatore dinamico segnala che WMI deve usare un provider per recuperare le istanze della classe. Il qualificatore del provider specifica il nome del provider che WMI deve usare.
Definire le proprietà ResultSetQueries, ReferencedSetQueriese UnsupportedQueries.
Queste proprietà di query descrivono informazioni dettagliate sulla classe supportata.
Oltre a descrivere i vari metodi supportati di una classe, la classe __ClassProviderRegistration include anche tre proprietà che descrivono una serie di query. Se usate insieme, queste tre proprietà descrivono l'intero intervallo di classi fornito dal provider di classi. Ogni proprietà di query contiene un'istruzione WQL SELECT, denominata "query schema", per specificare i tipi di classi supportate. Le query dello schema specificano un nome di classe speciale denominato meta_class. Nella tabella seguente sono elencate le proprietà della query.
Proprietà | Descrizione |
---|---|
ResultSetQueries | Contiene informazioni sul set di risultati fornito dal provider. WMI usa le informazioni per determinare se richiamare il provider per soddisfare una query da parte di un'applicazione. Questa proprietà descrive il set di tutte le classi che il provider può fornire o un superset delle classi disponibili, ma mai un subset. WMI richiede che un provider specifichi almeno una query in questa proprietà. Nell'esempio seguente viene illustrato come impostare ResultSetQueries quando un provider fornisce una classe di associazione che fa riferimento alla classe Win32_LogicalDisk. SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk" Nell'esempio seguente viene illustrato come specificare una query generale quando un provider fornisce classi che fanno riferimento ad altre classi sconosciute. SELECT * FROM meta_class Nell'esempio seguente viene illustrato come impostare ResultSetQueries quando un provider fornisce solo sottoclassi, ma non la classe padre di una determinata classe. SELECT * FROM meta_class WHERE __Dynasty = "MyClass" Nell'esempio seguente viene illustrato come utilizzare la proprietà __this speciale e impostare ResultSetQueries quando un provider fornisce tutte le classi e sottoclassi. SELECT * FROM meta_class WHERE __this ISA "MyClass" |
ReferencedSetQueries | Determina se ignorare il provider nelle query dello schema in cui vengono richieste associazioni e riferimenti. I provider in grado di fornire classi di associazione devono includere almeno una query nella proprietà ReferencedSetQueries. |
UnsupportedQueries | Contiene informazioni sul set di risultati che un provider di classi non fornisce. WMI usa questa proprietà per sottrarre dal set di classi implicite da ResultSetQueries. Ad esempio, un provider di classi può specificare in ResultSetQueries supporto per tutte le classi derivate da MyClass e specificare in UnsupportedQueries una mancanza di supporto per una determinata classe derivata. Più informazioni un provider può registrare sulle sue capacità di elaborazione delle query, più velocemente verrà eseguito. Inserire una o più query nella proprietà UnsupportedQueries è un modo per essere specifici ed è particolarmente importante quando un provider dipende da una classe che non fornisce. Quando viene effettuata una richiesta per una classe elencata in una query nella proprietà UnsupportedQueries, WMI può fornire la classe stessa o richiamare un provider alternativo per fornirlo. |
Poiché WMI non supporta la clausola OR, è necessario creare una query separata per ogni classe.
Le query seguenti vengono specificate in ResultSetQueries quando un provider di classi fornisce MyClass1, MyClass2 e MyClass3.
SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"
Solo gli amministratori possono registrare o eliminare un provider creando un'istanza di __Win32Provider e __ClassProviderRegistration.