Compartir a través de


Función WmiSystemControl (wmilib.h)

La rutina de WmiSystemControl de es una rutina de distribución para los controladores que usan biblioteca WMI admite rutinas para controlar 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_OBJECTdel 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 DpWmi Xxx del controlador llamada por WmiSystemControl no completó el IRP, el controlador debe llamar a WmiCompleteRequest para completar el IRP después de WmiSystemControl devuelve.

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 las solicitudes IRP_MJ_SYSTEM_CONTROL 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 inferior, debe completar el IRP.

IrpForward

El IRP está dirigido 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 inferior, debe completar el IRP.

Valor devuelto

WmiSystemControl devuelve STATUS_SUCCESS o uno de los siguientes códigos de error:

Observaciones

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 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 dpWmi adecuadopunto de entrada Xxx en la estructura WMILIB_CONTEXT del controlador. WMI se ejecuta en irQL PASSIVE_LEVEL cuando llama a la rutina DpWmi Xxx 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 Valor
cliente mínimo admitido Disponible en Windows 2000 y versiones posteriores de Windows.
de la plataforma de destino de Universal
encabezado de wmilib.h (include Wmilib.h)
biblioteca de Wmilib.lib
irQL PASSIVE_LEVEL (consulte la sección Comentarios)
reglas de cumplimiento de DDI WmiComplete(wdm)

Consulte también

dpWmiExecuteMethod

dpWmiFunctionControl

dpWmiQueryDataBlock

DpWmiQueryReginfo

dpWmiSetDataBlock

dpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT