Compartir a través de


Envío de un evento con WmiFireEvent

Un controlador puede llamar a WmiFireEvent para enviar eventos que no usen nombres de instancia dinámicos y que basen nombres de instancia estáticos en una sola cadena de nombre base o el identificador de instancia de dispositivo de un PDO.

El evento debe ser una sola instancia de un bloque, es decir, un controlador no puede llamar a WmiFireEvent para enviar un evento que consta de un solo elemento o de varias instancias. Para enviar estos eventos, un controlador debe llamar a IoWMIWriteEvent, como se describe en Envío de un evento con IoWMIWriteEvent.

Un controlador no debe enviar eventos hasta que WMI haya habilitado el evento. Una vez habilitado el evento, cuando se produce la condición del desencadenador del evento, el controlador:

  1. Asigna un búfer del grupo no paginado y escribe los datos del evento en el búfer. Si el evento no tiene datos, el controlador puede omitir este paso.

  2. Llama a WmiFireEvent con los parámetros siguientes:

    • Puntero al objeto de dispositivo del controlador

    • Puntero al GUID que representa el bloque de eventos.

    • Si el bloque de eventos tiene varias instancias, el índice de la instancia

    • Si se van a enviar datos con el evento , el número de bytes de datos o 0 si no hay ninguno.

    • Si los datos se van a enviar con el evento , un puntero al búfer asignado por el controlador que contiene los datos o NULL si no hay ninguno.

    El controlador debe asignar todos los parámetros pasados a WmiFireEvent, incluido el búfer de datos del evento, del grupo no paginado. WMI libera la memoria asignada por el controlador sin intervención adicional del controlador.

Después de que WmiFireEvent vuelva, el controlador reanuda la supervisión de la condición del desencadenador del evento y envía el evento cada vez que se produce su condición de desencadenador hasta que WMI deshabilita ese evento.