Поделиться через


Отправка события с помощью WmiFireEvent

Драйвер может вызывать WmiFireEvent для отправки событий, которые не используют динамические имена экземпляров и которые основывают статические имена экземпляров на одной строке базового имени или идентификаторе экземпляра устройства PDO.

Событие должно быть одним экземпляром блока, то есть драйвер не может вызвать WmiFireEvent для отправки события, состоящего из одного элемента или нескольких экземпляров. Для отправки таких событий драйвер должен вызвать IoWMIWriteEvent, как описано в разделе Отправка события с помощью IoWMIWriteEvent.

Драйвер не должен отправлять события, пока WMI не включит это событие. После включения события при возникновении условия триггера события драйвер:

  1. Выделяет буфер из непагрегированного пула и записывает данные события в буфер. Если событие не содержит данных, драйвер может пропустить этот шаг.

  2. Вызывает WmiFireEvent со следующими параметрами:

    • Указатель на объект устройства драйвера

    • Указатель на GUID, представляющий блок событий.

    • Если блок событий содержит несколько экземпляров, индекс экземпляра

    • Если данные должны быть отправлены с событием, количество байтов данных или 0, если нет

    • Если данные должны быть отправлены с событием, указатель на буфер, выделенный драйвером, который содержит данные, или NULL , если нет.

    Драйвер должен выделить все параметры, переданные в WmiFireEvent, включая буфер данных событий, из непагружированного пула. WMI освобождает память, выделенную драйвером, без дальнейшего вмешательства драйвера.

После возврата WmiFireEvent драйвер возобновляет мониторинг состояния триггера события и отправляет событие при каждом возникновении условия триггера до тех пор, пока WMI не отключит это событие.