Compartilhar via


IRP_MN_ENABLE_COLLECTION

Qualquer driver WMI que registre um ou mais de seus blocos de dados como potencialmente demorado ou caro para coletar deve lidar com esse IRP. Um driver pode lidar com IRPs WMI chamando WmiSystemControl ou manipulando o próprio IRP, conforme descrito em Manipulando solicitações WMI.

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

Código principal

IRP_MJ_SYSTEM_CONTROL

Quando enviado

O WMI envia esse IRP para solicitar que o driver comece a acumular dados para um bloco de dados que o driver registrou como caro de coletar.

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 dados para o qual os dados são acumulados.

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 como um erro apropriado status como o seguinte:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

Em caso de êxito, um driver define Irp-IoStatus.Information> como zero.

Operação

Um driver registra um bloco de dados como caro para coletar definindo WMIREG_FLAG_EXPENSIVE no membro Flags da estrutura WMIREGGUID ou WMIGUIDREGINFO . O driver passa essas estruturas para o WMI quando registra ou atualiza o bloco de dados. Um driver não precisa acumular dados para esse bloco até receber uma solicitação explícita para iniciar a coleta de dados.

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

Se um driver manipular 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_COLLECTION em si, ele deverá fazer isso 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 de lidar com uma solicitação, o driver deve verificar se Parameters.WMI.DataPath aponta para um GUID compatível com o driver. Se isso não acontecer, o driver deverá falhar no IRP e retornar STATUS_WMI_GUID_NOT_FOUND. Se o bloco de dados for válido, mas não tiver sido registrado com WMIREG_FLAG_EXPENSIVE, o driver poderá retornar STATUS_SUCCESS e não executar nenhuma ação adicional.

Se o bloco for válido e tiver sido registrado com WMIREG_FLAG_EXPENSIVE, o driver habilitará a coleta de dados para todas as instâncias desse bloco de dados.

É desnecessário que o driver marcar se a coleta de dados já está habilitada para o bloco de dados. O WMI envia apenas uma única solicitação para habilitar um bloco de dados depois que o primeiro consumidor de dados habilita o bloco. O WMI não enviará outra solicitação para habilitar sem uma solicitação de desabilitação intermediária.

Requisitos

parâmetro

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

Confira também

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WmiSystemControl