Condividi tramite


Chiamata di WmiSystemControl per gestire i runtime di integrazione WMI

Le routine della libreria WMI semplificano la gestione delle richieste WMI perché invece di elaborare ogni richiesta di questo tipo, un driver chiama WmiSystemControl. Nella chiamata WmiSystemControl il driver passa una struttura di WMILIB_CONTEXT inizializzata che contiene punti di ingresso alle routine di callback della libreria WMI del driver (routine DpWmiXxx ) e informazioni sui blocchi di dati e sugli eventi del driver.

Poiché la libreria WMI non fornisce alcun meccanismo per passare nomi di istanze dinamiche o un elenco di nomi di istanza statici, un driver può usare la libreria WMI per gestire le richieste che coinvolgono solo blocchi di dati con nomi di istanza statici basati su un PDO o una singola stringa di nome di base. Per altre informazioni sui nomi delle istanze statiche e dinamiche, vedere Definizione dei nomi di istanza WMI. Nothing impedisce a un driver di usare la libreria WMI per gestire le richieste per tali blocchi ed elaborando le richieste per altri blocchi nella routine DispatchSystemControl . Per altre informazioni, vedere Elaborazione di IRP WMI in una routine DispatchSystemControl.

Per gestire i runtime di integrazione WMI chiamando WmiSystemControl, un driver deve implementare determinate routine di callback DpWmiXxx necessarie e potrebbe implementare routine di callback DpWmiXxx facoltative aggiuntive:

Le routine DpWmiXxx di un driver possono avere qualsiasi nome scelto dal writer di driver.

Prima di chiamare WmiSystemControl, il driver deve inizializzare una struttura WMILIB_CONTEXT con punti di ingresso alle routine DpWmiXxx e informazioni sui blocchi di dati e sui blocchi eventi.

Quando il driver riceve una richiesta WMI:

  1. Il driver chiama WmiSystemControl con un puntatore alla struttura WMILIB_CONTEXT inizializzata, un puntatore all'oggetto dispositivo e un puntatore all'IRP.

  2. WMI convalida i parametri IRP e chiama la routine DpWmiXxx del driver che elabora la richiesta. Se il driver non imposta alcun punto di ingresso nella relativa WMILIB_CONTEXT per una routine DpWmiXxx facoltativa, WMI completa l'IRP con valori e stato predefiniti.

  3. Nella routine DpWmiXxx il driver elabora la richiesta e scrive qualsiasi output nel buffer fornito dal chiamante. Ad esempio, la routine DpWmiQueryDataBlock di un driver scriverà le istanze richieste del blocco specificato nel buffer.

  4. In tutte le routine DpWmiXxx ad eccezione di DpWmiQueryReginfo, il driver chiama WmiCompleteRequest per completare la richiesta o restituisce STATUS_PENDING per posticipare il completamento, come per qualsiasi IRP.

  5. WMI esegue qualsiasi post-elaborazione necessaria, inserisce qualsiasi output in una struttura WNODE_XXX appropriata e passa l'output e lo stato al consumer di dati.