Compartir a través de


IRP_MN_DISABLE_COLLECTION

Cualquier controlador WMI que registre uno o varios de sus bloques de datos tan costosos de recopilar debe controlar este IRP. Un controlador puede controlar los IRP de WMI llamando a WmiSystemControl o controlando el PROPIO IRP, como se describe en Control de solicitudes WMI.

Si un controlador llama a WmiSystemControl para controlar una solicitud de IRP_MN_DISABLE_COLLECTION , WMI a su vez llama a la rutina DpWmiFunctionControl del controlador.

Código principal

IRP_MJ_SYSTEM_CONTROL

Cuándo se envió

WMI envía este IRP para solicitar al controlador que deje de acumular datos para un bloque de datos que el controlador registró como caro de recopilar y para el que se ha habilitado la recopilación de datos.

WMI envía este IRP en IRQL = PASSIVE_LEVEL en un contexto de subproceso arbitrario.

Parámetros de entrada

Parameters.WMI.ProviderId apunta al objeto de dispositivo del controlador que debe responder a la solicitud. Este puntero se encuentra en la ubicación de la pila de E/S del controlador en irP.

Parameters.WMI.DataPath apunta a un GUID que identifica el bloque de datos para el que se debe detener la acumulación de datos.

Parámetros de salida

Ninguno.

Bloque de estado de entrada/salida

Si el controlador controla el IRP mediante una llamada a WmiSystemControl, WMI establece Irp-IoStatus.Status> e Irp-IoStatus.Information> en el bloque de estado de E/S.

De lo contrario, el controlador establece Irp-IoStatus.Status> en STATUS_SUCCESS o en un estado de error adecuado, como el siguiente:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

Si se ejecuta correctamente, un controlador establece Irp-IoStatus.Information> en cero.

Operación

Un controlador registra un bloque de datos tan caro de recopilar estableciendo WMIREG_FLAG_EXPENSIVE en el miembro Flags de la estructura WMIREGGUID o WMIGUIDREGINFO que el controlador pasa a WMI cuando registra o actualiza el bloque de datos. Un controlador no necesita acumular datos para este bloque hasta que reciba una solicitud explícita para habilitar la recopilación.

Si un controlador controla los IRP de WMI llamando a WmiSystemControl, esa rutina llama a la rutina DpWmiFunctionControl del controlador o devuelve STATUS_SUCCESS si el controlador no define la rutina.

Si un controlador controla una solicitud de IRP_MN_DISABLE_COLLECTION , solo debe hacerlo si Parameters.WMI.ProviderId apunta al mismo objeto de dispositivo que el puntero que el controlador pasó a IoWMIRegistrationControl. De lo contrario, el controlador debe reenviar la solicitud al controlador inferior siguiente.

Antes de controlar la solicitud, el controlador debe determinar si Parameters.WMI.DataPath apunta a un GUID que admite el controlador. Si no es así, el controlador debe producir un error en el IRP y devolver STATUS_WMI_GUID_NOT_FOUND. Si el bloque de datos es válido pero no se registró con WMIREG_FLAG_EXPENSIVE, el controlador puede devolver STATUS_SUCCESS y no realizar ninguna otra acción.

No es necesario que el controlador compruebe si la recopilación de datos ya está deshabilitada porque WMI envía una única solicitud de deshabilitación para el bloque de datos cuando el último consumidor de datos deshabilita la recopilación de ese bloque. WMI no enviará otra solicitud de deshabilitación sin una solicitud intermedia para habilitarla.

Requisitos

Encabezado

Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h)

Consulte también

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_ENABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WMIGUIDREGINFO

WmiSystemControl