Condividi tramite


Supporto di blocchi di dati e eventi WMI nel driver

[Si applica solo a KMDF]

I driver basati su framework supportano blocchi di dati WMI fornendo funzioni di callback degli eventi. I driver supportano gli eventi WMI chiamando un metodo oggetto che invia un evento ai client WMI.

Supporto per i blocchi di dati WMI di lettura/scrittura

Se le informazioni in un blocco di dati WMI sono sia leggibili che scrivibili dai client WMI, il driver deve fornire un EvtWmiInstanceQueryInstance funzione di callback che consente di gestire le richieste di lettura di un client, oltre a EvtWmiInstanceSetInstance o EvtWmiInstanceSetItem funzioni di callback (o entrambe) che serviziono le richieste di scrittura di un client.

Se il blocco di dati contiene metodi che il driver esegue su richiesta del client, il driver deve fornire anche una funzione di callback EvtWmiInstanceExecuteMethod.

Se un blocco di dati WMI è di sola scrittura, ovvero i client WMI possono scrivere informazioni nel blocco di dati ma non possono leggere il blocco di dati, il driver non fornisce un EvtWmiInstanceQueryInstance funzione di callback.

Supporto di blocchi di dati WMI Read-Only

Se le informazioni in un blocco di dati WMI non possono essere modificate da un client WMI, il driver non fornisce EvtWmiInstanceSetInstance o EvtWmiInstanceSetItem funzioni di callback. Per supportare le richieste di informazioni del blocco di dati dai client WMI, il driver può eseguire una delle operazioni seguenti:

Se il driver imposta UseContextForQuery su TRUE, il framework copia lo spazio di contesto dell'oggetto istanza in un buffer fornito da WMI quando un client WMI richiede le informazioni dell'istanza. Non sono richiesti EvtWmiInstanceXxx callback se il driver ha una sola istanza WMI che fornisce dati di sola lettura e a lunghezza fissa dall'area del contesto dell'oggetto.

Se un blocco di dati di sola lettura contiene metodi eseguiti dal driver su richiesta del client, il driver può anche fornire una funzione di callback EvtWmiInstanceExecuteMethod.

Supporto di blocchi di dati WMI costosi

Se il driver raccoglie quantità relativamente elevate di dati dinamici per supportare uno dei blocchi di dati WMI, il driver deve eseguire le operazioni seguenti:

  • Dichiarare il blocco di dati "costoso" impostando il flag di WdfWmiProviderExpensive membro della struttura di WDF_WMI_PROVIDER_CONFIG dell'oggetto provider WMI.

  • Fornire una funzione di callback EvtWmiProviderFunctionControl che abilita e disabilita la raccolta dei dati per il blocco di dati, oppure chiamare WdfWmiProviderIsEnabled per determinare se il driver deve abilitare o disabilitare la raccolta dei dati.

Se il driver imposta il flag di WdfWmiProviderExpensive, il framework chiama la funzione di callback EvtWmiProviderFunctionControl quando un client WMI esegue la registrazione per accedere al blocco di dati. La funzione di callback deve abilitare la capacità del driver di raccogliere dati. Se tutti i client WMI rimuovono le registrazioni per il blocco di dati, il framework chiama la funzione di callback EvtWmiProviderFunctionControl in modo che il driver possa interrompere la raccolta dei dati.

Supporto di eventi WMI

Un driver può usare eventi WMI per notificare ai client WMI condizioni eccezionali. Non è consigliabile usare eventi WMI come alternativa alla registrazione degli errori. Analogamente agli elementi di dati, gli eventi WMI vengono definiti nei blocchi di dati WMI all'interno di file con estensione mof (Managed Object Format).

I client WMI si registrano per la notifica degli eventi WMI. Per inviare un evento ai client WMI registrati, il driver chiama il metodo WdfWmiInstanceFireEvent. Questo metodo consente al driver di inviare facoltativamente dati specifici dell'evento ai client.

Se il blocco di dati WMI che definisce l'evento contiene anche elementi di dati o metodi WMI, il driver fornisce funzioni di callback WMI appropriate. Se un blocco di dati definisce un evento ma non contiene dati o elementi del metodo, il driver deve impostare il flag WdfWmiProviderEventOnly nel membro Flags della struttura WDF_WMI_PROVIDER_CONFIG dell'oggetto provider WMI.

Il driver deve chiamare WdfWmiInstanceFireEvent solo se un client WMI è registrato per la notifica degli eventi. Il driver può determinare se deve chiamare WdfWmiInstanceFireEvent fornendo un EvtWmiProviderFunctionControl funzione di callback o chiamando WdfWmiProviderIsEnabled.

Supporto per il tracciamento degli eventi WMI

Gli eventi di traccia vengono definiti nei file mof, allo stesso modo degli altri eventi WMI. Quando il driver crea un oggetto provider WMI per un evento di traccia, deve impostare il flag WdfWmiProviderTracing nel Flags membro della struttura di WDF_WMI_PROVIDER_CONFIG dell'oggetto provider.

Dopo la registrazione di un'istanza del provider, il driver può chiamare WdfWmiProviderGetTracingHandle per ottenere un handle di trace. Il driver può usare l'handle di traccia come input per la routine WmiTraceMessage.

Per altre informazioni sulla traccia degli eventi, vedere: