Registrazione di un provider 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 sia già stato implementato il processo di registrazione, come descritto in Registrazione di un provider. Se il provider archivia la maggior parte dei dati nel repository WMI e che i dati vengono aggiornati solo per l'inizializzazione WMI, registrare la classe come provider di classi push. Se i dati che si forniscono spesso e vengono recuperati dinamicamente dal codice in ogni richiesta da WMI, registrare il provider come provider di classi pull.

La procedura seguente descrive come registrare un provider di classi push.

Per registrare un provider di classi push

La procedura seguente descrive come registrare un provider di classi pull.

Per registrare un provider di classi pull

  1. Creare un'istanza della classe __Win32Provider che descrive il provider.

  2. Creare un'istanza della classe __ClassProviderRegistration che descrive il set di funzionalità del provider.

    All'interno dell'istanza di __ClassProviderRegistration :

    1. Impostare la proprietà InteractionType per indicare se il provider è un provider push o pull.

    2. Contrassegna la classe con qualificatori dinamici e provider .

      Il qualificatore dinamico segnala che WMI deve usare un provider per recuperare le istanze della classe. Il qualificatore provider specifica il nome del provider che deve usare WMI.

    3. Definire le proprietà ResultSetQueries, ReferencedSetQueries e 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 usato insieme, queste tre proprietà descrivono l'intera gamma di classi fornite dal provider di classi. Ogni proprietà di query contiene un'istruzione WQL SELECT, denominata "query dello 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 un'applicazione. Questa proprietà descrive il set di tutte le classi che il provider può fornire o un superset delle classi disponibili, ma non 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 usare la proprietà __this speciale e impostare ResultSetQueries quando un provider fornisce tutte le classi e le 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 che possono fornire classi di associazione devono includere almeno una query nella proprietà ReferencedSetQueries .
Non supportatoQueries 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 nel supporto ResultSetQueries per tutte le classi derivate da MyClass e specificare in UnsupportedQueries una mancanza di supporto per una determinata classe derivata.
Altre informazioni che un provider può registrare sulle funzionalità di elaborazione delle query, più velocemente viene eseguita. L'immissione di una o più query nella proprietà UnsupportedQueries è un modo per essere specifica ed è particolarmente importante quando un provider si basa su una classe che non fornisce. Quando viene effettuata una richiesta per una classe elencata in una query nella proprietà UnsupportedQueries , WMI può specificare la classe stessa o richiamare un provider alternativo per specificarlo.

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.