Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.