IRP_MN_ENABLE_EVENTS

Qualquer driver WMI que registra um ou mais blocos de eventos deve lidar com esse IRP. Um driver pode lidar com IRPs WMI chamando WmiSystemControl ou manipulando o próprio IRP, conforme descrito no tratamento de solicitações WMI.

Se um driver chamar WmiSystemControl para lidar com uma solicitação IRP_MN_ENABLE_EVENTS , o WMI, por sua vez, chamará a rotina DpWmiFunctionControl do driver.

Código principal

IRP_MJ_SYSTEM_CONTROL

Quando enviado

O WMI envia esse IRP para informar ao driver que um consumidor de dados solicitou a notificação de um evento.

O WMI envia esse IRP em IRQL = PASSIVE_LEVEL em um contexto de thread arbitrário.

Parâmetros de Entrada

Parameters.WMI.ProviderId aponta para o objeto de dispositivo do driver que deve responder à solicitação. Esse ponteiro está localizado no local da pilha de E/S do driver no IRP.

Parameters.WMI.DataPath aponta para um GUID que identifica o bloco de eventos a ser habilitado.

Parameters.WMI.BufferSize indica o tamanho do buffer nãopagado em Parameters.WMI.Buffer, que deve ser maior ou igual ao tamanho(WNODE_HEADER). Um driver que não registra blocos de rastreamento (WMIREG_FLAG_TRACED_GUID) pode ignorar esse parâmetro.

Parameters.WMI.Buffer aponta para um WNODE_HEADER que indica se o evento deve ser rastreado (WMI_FLAGS_TRACED_GUID) e fornece um identificador para o agente do sistema. Um driver que não registra blocos de rastreamento (WMIREG_FLAG_TRACED_GUID) pode ignorar esse parâmetro.

Parâmetros de saída

Nenhum.

Bloco de Status de E/S

Se o driver manipular o IRP chamando WmiSystemControl, o WMI definirá Irp-IoStatus.Status> e Irp-IoStatus.Information> no bloco de status de E/S.

Caso contrário, o driver define Irp-IoStatus.Status> como STATUS_SUCCESS ou para um status de erro apropriado, como o seguinte:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

Com êxito, um driver define Irp-IoStatus.Information> como zero.

Operação

Um driver pode lidar com IRPs WMI chamando WmiSystemControl ou manipulando o próprio IRP, conforme descrito no tratamento de solicitações WMI.

Se um driver manipular OS IRPs WMI chamando WmiSystemControl, essa rotina chamará a rotina DpWmiFunctionControl do driver ou retornará STATUS_SUCCESS se o driver não definir a rotina.

Se um driver manipular uma solicitação IRP_MN_ENABLE_EVENTS em si, ele deverá fazê-lo somente se Parameters.WMI.ProviderId apontar para o mesmo objeto de dispositivo que o ponteiro que o driver passou para IoWMIRegistrationControl. Caso contrário, o driver deve encaminhar a solicitação para o driver inferior seguinte.

Antes que o driver lide com a solicitação, ele deve determinar se Parameters.WMI.DataPath aponta para um GUID compatível com o driver. Caso contrário, o driver deve falhar no IRP e retornar STATUS_WMI_GUID_NOT_FOUND.

Se o driver der suporte ao bloco de eventos, ele habilitará o evento para todas as instâncias desse bloco de dados.

É desnecessário que o driver verifique se os eventos já estão habilitados para o bloco de eventos porque o WMI envia uma única solicitação para habilitar o bloco de eventos quando o primeiro consumidor de dados habilita o evento. O WMI não enviará outra solicitação para habilitar sem uma solicitação de desabilitar intervenção.

Um driver que registra blocos de rastreamento (WMIREG_FLAG_TRACED_GUID) também deve determinar se o evento deve ser enviado ao WMI ou ao agente do sistema para rastreamento. Se o rastreamento for solicitado, Parameters.WMI.Buffer apontará para uma estrutura WNODE_HEADER na qual o Flags é definido com WNODE_FLAG_TRACED_GUID e HistoricContext contém um identificador para o agente.

Para obter detalhes sobre como definir blocos de eventos, enviar eventos e rastreamento, consulte Windows Instrumentação de Gerenciamento.

Requisitos

Cabeçalho

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)

Confira também

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl

WNODE_EVENT_ITEM

WNODE_HEADER