Compartir a través de


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)

Consulte también

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT