Fornire dati a WMI

WMI rende disponibili i dati sugli oggetti gestibili di Windows tramite provider WMI. Un provider recupera i 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 una richiesta di script elabora le informazioni usando la classe WMI Win32_Process , i dati vengono ottenuti in modo dinamico tramite un provider preinstallato.

Le sezioni seguenti sono illustrate in questo argomento:

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 desktop, è necessario decidere come modellare 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 quale tipo di azioni 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 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 è 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 #pragma preprocessore di ripristino automatico nel file MOF (Managed Object Format).

 

Dopo aver creato il file MOF, compilarlo usando lo strumento Mofcomp.exe . In questo modo viene visualizzato un avviso degli 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 certo numero di tipi di provider, che determina la natura delle informazioni fornite 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 dispone di un file DLL che può essere eseguito all'interno di un processo e di un contesto di sicurezza specifico. Si tratta di ciò che WMI fa riferimento al 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 associato o disaccoppiato.

Il termine provider associato o disaccoppiato determina in quale processo host viene eseguito il provider rispetto al processo WMI fornito WMIPRVSE.EXE. 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 il provider si basa su è sempre disponibile (in esecuzione nel sistema), il provider deve essere un provider associato, in caso contrario, deve essere un provider disaccoppiato. Per altre informazioni sull'hosting dei modelli, vedere Hosting e sicurezza del provider.

Per altre informazioni sulla creazione di un provider associato, vedere Fornitura 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 associati possono essere descritti come in-process (in-proc) o out-of-process (out-of-proc). Quando un provider associato è un provider in-proc, viene eseguito in un processo di hosting WMI condiviso WMIPRVSE.EXE e viene implementato come server COM in-proc (.dll). Quando un provider è un provider out-of-proc, viene avviato da WMI per 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:

  • Uso della procedura guidata ATL in Visual Studio.

    La procedura guidata ATL genera il codice del provider che implementa un provider associato. Durante l'uso della procedura guidata ATL, è possibile specificare che si vuole creare un modello di runtime in-proc (.dll) o out-of-proc (.exe).

  • Definizione di un oggetto COM che contiene il provider.

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

  • Uso delle classi nello spazio dei nomi Microsoft.Management.Infrastructure in .NET Framework per creare un provider usando il 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 con il sistema WMI e il sottosistema WINDOWS COM.

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 è 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 di MSFT_WmiProvider_OperationEvent . Questi eventi informano gli eventuali errori di carico 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 Provider di debuge configurazione provider e classi di risoluzione dei problemi.
  • Se il provider è un provider di istanza o di metodo, 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 dovrebbe implementare alcun elemento, dovrebbe 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 nonadministrator. Il provider deve supportare la rappresentazione. Se un utente non dispone delle credenziali di sicurezza corrette tenta di aggiornare i dati o 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

Fornitura di 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