Compartilhar via


Enviando um evento com WmiFireEvent

Um driver pode chamar WmiFireEvent para enviar eventos que não usam nomes de instância dinâmica e que baseiam nomes de instância estática em uma única cadeia de caracteres de nome base ou na ID da instância do dispositivo de um PDO.

O evento deve ser uma única instância de um bloco, ou seja, um driver não pode chamar WmiFireEvent para enviar um evento que consiste em um único item ou várias instâncias. Para enviar esses eventos, um driver deve chamar IoWMIWriteEvent, conforme descrito em Enviando um evento com IoWMIWriteEvent.

Um driver não deve enviar eventos até que o WMI habilite o evento. Depois que o evento tiver sido habilitado, quando a condição de gatilho do evento ocorrer, o driver:

  1. Aloca um buffer do pool nãopagado e grava os dados do evento no buffer. Se o evento não tiver dados, o driver poderá ignorar esta etapa.

  2. Chama WmiFireEvent com os seguintes parâmetros:

    • Um ponteiro para o objeto de dispositivo do driver

    • Um ponteiro para o GUID que representa o bloco de eventos

    • Se o bloco de eventos tiver várias instâncias, o índice da instância

    • Se os dados forem enviados com o evento, o número de bytes de dados ou 0 se nenhum

    • Se os dados forem enviados com o evento, um ponteiro para o buffer alocado pelo driver que contém os dados ou NULL se nenhum

    O driver deve alocar todos os parâmetros passados para WmiFireEvent, incluindo o buffer de dados de eventos, do pool nãopagado. O WMI libera a memória alocada pelo driver sem intervenção adicional do driver.

Depois que WmiFireEvent retorna, o driver retoma o monitoramento da condição de gatilho do evento e envia o evento sempre que sua condição de gatilho ocorre até que o WMI desabilite esse evento.