Fornire dati a WMI

WMI rende disponibili dati su Windows oggetti gestibili tramite provider WMI. Un provider recupera dati da un componente di sistema, ad esempio un processo o un'applicazione instrumentata, ad esempio SNMP o IIS, e passa tali dati tramite WMI a un'applicazione di gestione. Ad esempio, quando un'applicazione o uno script richiede informazioni sul processo usando la classe Win32_Process WMI, i dati vengono ottenuti in modo dinamico tramite un provider preinstallato.

In questo argomento vengono illustrate le sezioni seguenti:

Creazione di un modello per un oggetto gestibile

Prima di sviluppare un provider, creare un modello di dati per rappresentare l'oggetto gestibile da esporre tramite WMI. Si pianificano gli oggetti dati esposti dal provider. Ad esempio, se si prevede di gestire la risoluzione dello schermo dello sfondo del desktop, è necessario decidere come modellare il desktop in un file MOF (Managed Object Format).

Per creare un modello utile:

  • Determinare scenari reali e modellare le informazioni che un cliente può voler leggere e aggiornare (ad esempio, modificando l'immagine di sfondo) per ogni oggetto gestibile. Queste sono le proprietà della classe.
  • Determinare il tipo di azioni che un cliente può voler eseguire con ogni oggetto gestibile. Questi sono i metodi.

Implementazione di un modello per un oggetto gestibile

Per implementare un modello per gli oggetti gestibili, creare un file MOF contenente una classe WMI che rappresenta ogni oggetto. Per altre informazioni sulla creazione di un file MOF per definire classi WMI, vedere Progettazione di classi MOF (Managed Object Format). La registrazione del provider e delle relative classi viene in genere inclusa nel file MOF, anche se è possibile usare l'API COM per creare classi e metodi. Per altre informazioni, vedere Sviluppo di un provider WMI.

Nota

Per assicurarsi che tutte le definizioni di classe WMI per gli oggetti gestiti vengano ripristinate nel repository WMI se WMI ha un errore e viene riavviato, usare l'istruzione del preprocessore di salvataggio automatico #pragma nel file MOF (Managed Object Format).

 

Dopo aver creato il file MOF, compilarlo usando lo strumento Mofcomp.exe . Ciò notifica gli errori nel file MOF e aggiunge la classe WMI definita nel file MOF al repository WMI in modo che la classe possa essere usata da un provider.

Determinazione di un tipo di provider da implementare

WMI supporta un determinato numero di tipi di provider, che determina la natura delle informazioni recapitate e delle operazioni supportate dai provider.

I tipi di provider sono:

La maggior parte dei provider sono provider di istanze e provider di metodi. Un provider di istanze è il provider più comune e fornisce le istanze di una determinata classe. Un provider di metodi implementa i metodi di una o più classi. Per altre informazioni sui tipi di provider, vedere Sviluppo di un provider WMI.

Determinazione di un modello di hosting (implementazione) per un provider

I provider WMI sono file binari implementati come oggetti COM. Ciò significa che ogni provider ha un file DLL che può essere eseguito all'interno di un processo e un contesto di sicurezza specifici. Questo è il significato di WMI come modello di hosting. WMI offre diversi modi per ospitare i provider, ma l'approccio più comune consiste nell'usare il modello di provider accoppiato (in esecuzione nel processo WMI) nel contesto di sicurezza NetworkServiceHost. Un provider WMI può essere classificato come accoppiato o disaccoppiato.

Il termine provider accoppiato o disaccoppiato determina in quale processo host viene eseguito il provider rispetto al processo di WMIPRVSE.EXE fornito da WMI. Una procedura consigliata consiste nel determinare se i dati di gestione esposti dal provider e l'API o l'applicazione su cui si basa sono sempre disponibili nel sistema o meno. Se l'API o l'applicazione su cui si basa il provider è sempre disponibile (in esecuzione nel sistema), il provider deve essere un provider accoppiato, in caso contrario, deve essere un provider disaccoppiato. Per altre informazioni sui modelli di hosting, vedere Hosting e sicurezza del provider.

Per altre informazioni sulla creazione di un provider associato, vedere Specifica di dati a WMI scrivendo un provider e per informazioni sull'incorporamento di un provider disaccoppiato in un'applicazione, vedere Incorporamento di un provider in un'applicazione.

I provider di accoppiamento possono essere descritti come in-process (in-proc) o out-of-process (out-of-process). Quando un provider accoppiato è un provider in-process, viene eseguito in un processo di hosting WMI condiviso WMIPRVSE.EXE e viene implementato come server in-proc COM (.dll). Quando un provider è un provider out-of-process, viene avviato da WMI su richiesta di un client o di un evento, ma viene eseguito come processo separato e viene implementato come eseguibile (.exe).

Implementazione di un provider

Un provider può essere implementato nei modi seguenti:

  • Utilizzo della Procedura guidata ATL in Visual Studio.

    La procedura guidata ATL genera il codice del provider che implementa un provider accoppiato. Quando si usa la Procedura guidata ATL, è possibile specificare che si vuole creare un modello di runtime in-process (.dll) o out-of-proc (.exe).

  • Definizione di un oggetto COM per contenere il provider.

    Il codice del provider è scritto in C++. Per altre informazioni, vedere Specifica di dati a WMI scrivendo un provider.

  • Uso delle classi nello spazio dei nomi Microsoft.Management.Infrastructure in .NET Framework per creare un provider usando codice gestito. Lo spazio dei nomi System.Management.Instrumentation non è più supportato.

    Questo processo crea un provider disaccoppiato.

Registrazione di un provider con WMI e sistema

Prima di usare il provider da un consumer, è importante registrarlo nel sistema WMI e nel sottosistema COM Windows.

Un file MOF può contenere più tipi di provider per le stesse classi. Lo stesso nome del provider viene registrato come, ad esempio, un'istanza o un provider di metodi. Per altre informazioni, vedere Registrazione di un provider.

Test di un provider

Quando il codice del provider viene registrato, è importante testare correttamente il provider usando il provider di consumer diversi, ad esempio script, codice gestito .NET e consumer C++.

Eseguire le attività seguenti per testare il provider:

  • Assicurarsi che il provider venga caricato correttamente monitorando le notifiche degli eventi MSFT_WmiProvider_OperationEvent . Questi eventi informeranno gli eventuali errori di caricamento del provider. Altre classi di risoluzione dei problemi che possono essere utili sono Win32_ProcessStartTrace e Win32_ProcessStopTrace. Per altre informazioni sui provider di risoluzione dei problemi, vedere Debug di provider e configurazione del provider e classi di risoluzione dei problemi.
  • Se il provider è un'istanza o un provider di metodi, assicurarsi di testare ogni funzionalità del provider uno per uno per evitare confusione seguendo la logica del codice.
  • Per un provider di istanze, creare un'applicazione client o uno script che richiama ogni interfaccia del provider (enumerazione, get, put ed delete). Anche se il provider non deve implementare alcun elemento, deve restituire un messaggio "non supportato". È possibile trovare i valori restituiti già definiti nei codici restituiti WMI.
  • Per assicurarsi che il contesto di sicurezza desiderato funzioni come pianificato, richiamare le operazioni supportate dal provider da un contesto di sicurezza non amministratore. Il provider deve supportare la rappresentazione. Se un utente privo delle credenziali di sicurezza corrette tenta di aggiornare i dati o di eseguire un'operazione che esegue un metodo, il provider deve negare l'accesso con il messaggio di errore appropriato.
  • Per altre informazioni sulla sicurezza del provider, vedere Protezione del provider.

Sviluppo di un provider WMI

Hosting e sicurezza del provider

Specifica dei dati a WMI scrivendo un provider

Incorporando un provider in un'applicazione

Registrazione di un provider

Risoluzione dei problemi relativi alle applicazioni client WMI

Protezione del provider

Recupero e fornitura di dati in una piattaforma a 64 bit