IRP_MN_ENABLE_COLLECTION
Cualquier controlador WMI que registre uno o varios de sus bloques de datos como potencialmente lento o costoso, para 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_ENABLE_COLLECTION , WMI a su vez llama a la rutina DpWmiFunctionControl del controlador.
Código principal
Cuándo se envió
WMI envía este IRP para solicitar al controlador que empiece a acumular datos para un bloque de datos que el controlador registró como costoso de recopilar.
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 el IRP.
Parameters.WMI.DataPath apunta a un GUID que identifica el bloque de datos para el que se acumulan los datos.
Parámetros de salida
Ninguno.
Bloque de estado de entrada/salida
Si el controlador controla el IRP llamando 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 para recopilar estableciendo WMIREG_FLAG_EXPENSIVE en el miembro Flags de la estructura WMIREGGUID o WMIGUIDREGINFO . El controlador pasa estas estructuras 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 iniciar la recopilación de datos.
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 controla 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_ENABLE_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 una solicitud, el controlador debe asegurarse de que 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.
Si el bloque es válido y se registró con WMIREG_FLAG_EXPENSIVE, el controlador habilita la recopilación de datos para todas las instancias de ese bloque de datos.
No es necesario que el controlador compruebe si la recopilación de datos ya está habilitada para el bloque de datos. WMI envía solo una única solicitud para habilitar un bloque de datos después de que el primer consumidor de datos habilite el bloque. WMI no enviará otra solicitud para habilitar sin una solicitud de deshabilitación intermedia.
Requisitos
Encabezado |
Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h) |