IRP_MN_DISABLE_COLLECTION
Qualquer driver WMI que registre um ou mais de seus blocos de dados como caros 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_DISABLE_COLLECTION , o WMI, por sua vez, chamará a rotina DpWmiFunctionControl desse driver.
Código principal
Quando enviado
O WMI envia esse IRP para solicitar que o driver pare de acumular dados para um bloco de dados que o driver registrou como caro para coletar e para o qual a coleta de dados foi habilitada.
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 o acúmulo de dados deve ser interrompido.
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 tão caro para coletar definindo WMIREG_FLAG_EXPENSIVE no membro Flags da estrutura WMIREGGUID ou WMIGUIDREGINFO que o driver passa 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 habilitar a coleta.
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_DISABLE_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 a solicitação, o driver 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 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.
É desnecessário que o driver marcar se a coleta de dados já está desabilitada porque o WMI envia uma única solicitação de desabilitação para o bloco de dados quando o último consumidor de dados desabilita a coleta para esse bloco. O WMI não enviará outra solicitação de desabilitação sem uma solicitação intermediária para habilitar.
Requisitos
parâmetro |
Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h) |