Share via


Senden eines Ereignisses mit WmiFireEvent

Ein Treiber kann WmiFireEvent aufrufen, um Ereignisse zu senden, die keine dynamischen instance Namen verwenden, und die statische instance Namen auf einer einzelnen Basisnamenzeichenfolge oder dem Gerät instance ID eines PDO basieren.

Das Ereignis muss ein einzelner instance eines Blocks sein. Das heißt, ein Treiber kann WmiFireEvent nicht aufrufen, um ein Ereignis zu senden, das aus einem einzelnen Element oder mehreren Instanzen besteht. Um solche Ereignisse zu senden, muss ein Treiber IoWMIWriteEvent aufrufen, wie unter Senden eines Ereignisses mit IoWMIWriteEvent beschrieben.

Ein Treiber sollte keine Ereignisse senden, bis WMI das Ereignis aktiviert hat. Nachdem das Ereignis aktiviert wurde, wenn die Triggerbedingung des Ereignisses auftritt, führt der Treiber Folgendes aus:

  1. Weist einen Puffer aus dem nicht auslagerten Pool zu und schreibt die Ereignisdaten in den Puffer. Wenn das Ereignis keine Daten enthält, kann der Treiber diesen Schritt überspringen.

  2. Ruft WmiFireEvent mit den folgenden Parametern auf:

    • Ein Zeiger auf das Geräteobjekt des Treibers

    • Ein Zeiger auf die GUID, die den Ereignisblock darstellt

    • Wenn der Ereignisblock über mehrere Instanzen verfügt, wird der Index des instance

    • Wenn Daten mit dem Ereignis gesendet werden sollen, die Anzahl der Datenbytes oder 0, wenn keine

    • Wenn Daten mit dem Ereignis gesendet werden sollen, ein Zeiger auf den vom Treiber zugewiesenen Puffer, der die Daten enthält, oder NULL , wenn keine

    Der Treiber muss alle Parameter, die an WmiFireEvent übergeben werden, einschließlich des Ereignisdatenpuffers, aus einem nicht auslagerten Pool zuordnen. WMI gibt den vom Treiber zugewiesenen Arbeitsspeicher ohne weiteres Eingreifen des Treibers frei.

Nach der Rückgabe von WmiFireEvent setzt der Treiber die Überwachung der Triggerbedingung des Ereignisses fort und sendet das Ereignis jedes Mal, wenn seine Triggerbedingung auftritt, bis WMI dieses Ereignis deaktiviert.