Condividi tramite


Implementazione dell'interfaccia primaria per un provider di classi

Esistono due modi per implementare un provider di classi: implementare l'interfaccia come provider push o come provider pull.

Le sezioni seguenti sono illustrate in questo argomento:

Implementazione dell'interfaccia primaria per un provider di classi push

Mentre tutti i provider implementano IWbemProviderInit per l'inizializzazione e almeno un'altra interfaccia come interfaccia primaria, un provider push implementa solo IWbemProviderInit.

Assicurarsi che l'implementazione esegua le attività seguenti:

  • Recupera i dati della classe appropriati.
  • Inserisce i dati nel repository WMI.
  • Elimina i dati obsoleti.

Dopo aver completato il processo di inizializzazione, WMI gestisce tutte le richieste di applicazione per le classi appartenenti al provider push senza alcuna ulteriore interazione tra provider. In seguito, il provider push funge in modo efficace da client di WMI anziché da un provider. Per altre informazioni sull'implementazione di IWbemProviderInit, vedere Inizializzazione di un provider.

Nota

Quando si chiama WMI per creare, aggiornare o rimuovere dati in un provider push, impostare il parametro lFlags per includere il flag di WBEM_FLAG_OWNER_UPDATE in tutte le chiamate ai metodi IWbemServices .

 

Implementazione dell'interfaccia primaria per un provider di classi pull

Un provider di pull di classi deve implementare IWbemServices come interfaccia primaria. L'interfaccia IWbemServices supporta il recupero dei dati, l'aggiornamento dei dati, la rimozione dei dati, l'enumerazione e l'elaborazione delle query. Tuttavia, poiché IWbemServices viene usato anche da applicazioni e provider per richiedere servizi di WMI, IWbemServices contiene molti metodi che sono irrilevanti per un provider di classi. L'implementazione deve supportare rispettivamente il recupero e l'enumerazione della classe tramite i metodi GetObjectAsync e CreateClassEnumAsync . Nella tabella seguente sono elencati i metodi IWbemServices asincroni aggiuntivi che è possibile implementare per un provider di classi.

Metodo Funzionalità
PutInstanceAsync Modifica
DeleteClassAsync Eliminazione

 

Nota

Poiché il callback nel sink potrebbe non essere restituito allo stesso livello di autenticazione richiesto dal client, è consigliabile usare semisynchrono anziché la comunicazione asincrona. Per altre informazioni, vedere Chiamata di un metodo.

 

Il provider di classi deve fornire un'implementazione stub che restituisce WBEM_E_PROVIDER_NOT_CAPABLE per tutti gli altri metodi IWbemServices che non supportano il set di funzionalità. In particolare, WMI non supporta l'elaborazione delle query per i provider di classi. Di conseguenza, un provider di classi deve restituire WBEM_E_PROVIDER_NOT_CAPABLE dall'implementazione di IWbemServices::ExecQueryAsync, impostare la proprietà di registrazione QuerySupportLevels su NULL o entrambi.

Le interfacce implementate da un provider di classi sono molto simili alle interfacce per un provider di istanze e a un provider di metodi. Infatti, un singolo provider può agire come tutti e tre i tipi di provider implementando tutti i metodi e registrando correttamente.