Condividi tramite


Invio di un evento con WmiFireEvent

Un driver può chiamare WmiFireEvent per inviare eventi che non usano nomi di istanza dinamica e che basano i nomi delle istanze statiche su una singola stringa del nome di base o l'ID dell'istanza del dispositivo di un PDO.

L'evento deve essere una singola istanza di un blocco, ovvero un driver non può chiamare WmiFireEvent per inviare un evento costituito da un singolo elemento o più istanze. Per inviare tali eventi, un driver deve chiamare IoWMIWriteEvent, come descritto in Invio di un evento con IoWMIWriteEvent.

Un driver non deve inviare eventi finché WMI non ha abilitato l'evento. Dopo aver abilitato l'evento, quando si verifica la condizione del trigger dell'evento, il driver:

  1. Alloca un buffer dal pool non in pagine e scrive i dati dell'evento nel buffer. Se l'evento non contiene dati, il driver può ignorare questo passaggio.

  2. Chiama WmiFireEvent con i parametri seguenti:

    • Puntatore all'oggetto dispositivo del driver

    • Puntatore al GUID che rappresenta il blocco di eventi

    • Se il blocco di eventi ha più istanze, l'indice dell'istanza

    • Se i dati devono essere inviati con l'evento, il numero di byte di dati o 0 se nessuno

    • Se i dati devono essere inviati con l'evento, un puntatore al buffer allocato dal driver che contiene i dati o NULL se nessuno

    Il driver deve allocare tutti i parametri passati a WmiFireEvent, incluso il buffer dei dati dell'evento, da un pool non di paging. WMI rilascia la memoria allocata dal driver senza ulteriore intervento da parte del driver.

Dopo la restituzione di WmiFireEvent , il driver riprende a monitorare la condizione del trigger dell'evento e invia l'evento ogni volta che si verifica la condizione del trigger finché WMI non disabilita tale evento.