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 di 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 una funzione di callback EvtWmiInstanceQueryInstance che fornisce le richieste di lettura di un client, oltre alle funzioni di callback EvtWmiInstanceSetInstance o EvtWmiInstanceSetItem (o entrambe) che forniscono le richieste di scrittura di un client.
Se il blocco di dati contiene metodi eseguiti dal driver alla 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 una funzione di callback EvtWmiInstanceQueryInstance .
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 funzioni di callback EvtWmiInstanceSetInstance o EvtWmiInstanceSetItem . Per supportare le richieste di informazioni del blocco di dati dai client WMI, il driver può eseguire una delle operazioni seguenti:
Fornire una funzione di callback EvtWmiInstanceQueryInstance per copiare i dati forniti dal driver in un buffer fornito da WMI.
Archiviare le informazioni del blocco di dati nello spazio di contesto dell'oggetto istanza WMI e impostare il membro UseContextForQuery della struttura WDF_WMI_INSTANCE_CONFIG dell'istanza su TRUE.
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 necessari callback EvtWmiInstanceXxx se il driver dispone di una sola istanza WMI che fornisce dati di sola lettura e a lunghezza fissa dall'area di contesto dell'oggetto.
Se un blocco di dati di sola lettura contiene metodi eseguiti dal driver alla 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 WdfWmiProviderExpensive nel membro Flags della struttura di WDF_WMI_PROVIDER_CONFIG dell'oggetto provider WMI.
Fornire una funzione di callback EvtWmiProviderFunctionControl che abilita e disabilita la raccolta dati per il blocco di dati oppure chiama WdfWmiProviderIsEnabled per determinare se il driver deve abilitare o disabilitare la raccolta dati.
Se il driver imposta il flag 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 nuovamente 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 gli 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 elementi del metodo WMI, il driver fornisce le 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 una funzione di callback EvtWmiProviderFunctionControl o chiamando WdfWmiProviderIsEnabled.
Supporto della traccia eventi WMI
Gli eventi di traccia vengono definiti nei file mof, nello 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 membro Flags della struttura 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 traccia. Il driver può usare l'handle di traccia come input per la routine WmiTraceMessage .
Per altre informazioni sulla traccia eventi, vedere: