Función WmiSystemControl (wmilib.h)
La rutina WmiSystemControl es una rutina de distribución para los controladores que usan rutinas de compatibilidad con la biblioteca WMI para controlar los IRP de WMI.
Sintaxis
NTSTATUS WmiSystemControl(
[in] PWMILIB_CONTEXT WmiLibInfo,
[in] PDEVICE_OBJECT DeviceObject,
[in, out] PIRP Irp,
[out] PSYSCTL_IRP_DISPOSITION IrpDisposition
);
Parámetros
[in] WmiLibInfo
Puntero a una estructura de WMILIB_CONTEXT que contiene información de registro para los bloques de datos y bloques de eventos de un controlador y define los puntos de entrada para las rutinas de devolución de llamada de la biblioteca WMI del controlador.
[in] DeviceObject
Puntero al DEVICE_OBJECT del controlador.
[in, out] Irp
Puntero al IRP.
[out] IrpDisposition
Puntero a un valor de enumeración de tipo SYSCTL_IRP_DISPOSITION que indica cómo se controló el IRP. WmiSystemControl siempre establece este valor, incluso cuando devuelve un código NTSTATUS no correcto.
SYSCTL_IRP_DISPOSITION es una enumeración en Wmilib.h y contiene los siguientes valores:
IrpProcessed
El IRP se procesó y posiblemente se completó. Si la rutina DpWmiXxx del controlador llamada por WmiSystemControl no completó el IRP, el controlador debe llamar a WmiCompleteRequest para completar el IRP después de que WmiSystemControl devuelva.
IrpNotCompleted
El IRP se procesó pero no se completó, ya sea porque WMI detectó un error y configuró el IRP con un código de error adecuado, o procesó una solicitud de IRP_MN_REGINFO o IRP_MN_REGINFO_EX . El controlador debe completar el IRP llamando a IoCompleteRequest.
IrpNotWmi
El IRP no es una solicitud WMI (es decir, WMI no reconoce el código secundario del IRP). Si el controlador controla IRP_MJ_SYSTEM_CONTROL solicitudes con este IRP_MN_XXX, debe controlar el IRP; de lo contrario, el controlador debe reenviar el IRP al siguiente controlador inferior. Si el controlador es el controlador de nivel más bajo, debe completar el IRP.
IrpForward
El IRP está destinado a otro objeto de dispositivo (es decir, el puntero de objeto de dispositivo en Parameters.WMI.ProviderId en irP no coincide con el puntero pasado por el controlador en su llamada a IoWMIRegistrationControl). El controlador debe reenviar el IRP al siguiente controlador inferior. Si el controlador es el controlador de nivel más bajo, debe completar el IRP.
Valor devuelto
WmiSystemControl devuelve STATUS_SUCCESS o uno de los siguientes códigos de error:
Comentarios
Cuando un controlador recibe una solicitud de IRP_MJ_SYSTEM_CONTROL con un código secundario IRP de WMI, llama a WmiSystemControl con un puntero a la estructura WMILIB_CONTEXT del controlador, un puntero a su objeto de dispositivo y un puntero al IRP. La estructura de WMILIB_CONTEXT contiene información de registro para los bloques de datos y bloques de eventos del controlador y define los puntos de entrada para sus rutinas de devolución de llamada de la biblioteca WMI.
WmiSystemControl confirma que IRP es una solicitud WMI y determina si el bloque especificado por la solicitud es válido para el controlador. Si es así, procesa el IRP llamando al punto de entrada DpWmiXxx adecuado en la estructura WMILIB_CONTEXT del controlador. WMI se ejecuta en IRQL PASSIVE_LEVEL cuando llama a la rutina DpWmiXxx del controlador.
Un controlador debe ejecutarse en IRQL PASSIVE_LEVEL cuando reenvía una solicitud de IRP_MJ_SYSTEM_CONTROL al controlador inferior siguiente.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible en Windows 2000 y versiones posteriores de Windows. |
Plataforma de destino | Universal |
Encabezado | wmilib.h (incluya Wmilib.h) |
Library | Wmilib.lib |
IRQL | PASSIVE_LEVEL (consulte la sección Comentarios) |
Reglas de cumplimiento de DDI | WmiComplete(wdm) |