WmiSystemControl 函数 (wmilib.h)

WmiSystemControl 例程是使用 WMI 库支持例程处理 WMI IRP 的驱动程序的调度例程。

语法

NTSTATUS WmiSystemControl(
  [in]      PWMILIB_CONTEXT         WmiLibInfo,
  [in]      PDEVICE_OBJECT          DeviceObject,
  [in, out] PIRP                    Irp,
  [out]     PSYSCTL_IRP_DISPOSITION IrpDisposition
);

参数

[in] WmiLibInfo

指向 WMILIB_CONTEXT 结构的指针,该结构包含驱动程序的数据块和事件块的注册信息,并定义驱动程序的 WMI 库回调例程的入口点。

[in] DeviceObject

指向驱动程序 DEVICE_OBJECT的指针。

[in, out] Irp

指向 IRP 的指针。

[out] IrpDisposition

指向 类型为 SYSCTL_IRP_DISPOSITION 的枚举值的指针,该值指示如何处理 IRP。 WmiSystemControl 始终设置此值,即使它返回不成功的 NTSTATUS 代码也是如此。

SYSCTL_IRP_DISPOSITION 是 Wmilib.h 中的枚举,包含以下值:

IrpProcessed

IRP 已处理并可能完成。 如果 WmiSystemControl 调用的驱动程序的 DpWmiXxx 例程未完成 IRP,则驱动程序必须在 WmiSystemControl 返回后调用 WmiCompleteRequest 以完成 IRP。

IrpNotCompleted

IRP 已处理但未完成,原因是 WMI 检测到错误并使用适当的错误代码设置了 IRP,或者处理 了IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求。 驱动程序必须通过调用 IoCompleteRequest 完成 IRP。

IrpNotWmi

IRP 不是 WMI 请求, (也就是说,WMI 无法识别 IRP 的次要代码) 。 如果驱动程序使用此 IRP_MN_XXX 处理IRP_MJ_SYSTEM_CONTROL请求,则它应处理 IRP;否则,驱动程序应将 IRP 转发到下一个较低的驱动程序。 如果驱动程序是最低级别的驱动程序,则必须完成 IRP。

IrpForward

IRP 面向另一个设备对象 (即 IRP 中 Parameters.WMI.ProviderId 处的设备对象指针与驱动程序在调用 IoWMIRegistrationControl) 时传递的指针不匹配。 驱动程序必须将 IRP 转发到下一个较低的驱动程序。 如果驱动程序是最低级别的驱动程序,则必须完成 IRP。

返回值

WmiSystemControl 返回STATUS_SUCCESS或以下错误代码之一:

注解

当驱动程序收到带有 WMI IRP 次要代码的IRP_MJ_SYSTEM_CONTROL请求时,它会使用指向驱动程序WMILIB_CONTEXT结构的指针、指向其设备对象的指针和指向 IRP 的指针调用 WmiSystemControlWMILIB_CONTEXT 结构包含驱动程序的数据块和事件块的注册信息,并定义其 WMI 库回调例程的入口点。

WmiSystemControl 确认 IRP 是 WMI 请求,并确定请求指定的块是否对驱动程序有效。 如果是这样,它将通过调用驱动程序WMILIB_CONTEXT结构中的相应 DpWmiXxx 入口点来处理 IRP。 在调用驱动程序的 DpWmiXxx 例程时,WMI 在 IRQL PASSIVE_LEVEL运行。

当驱动程序将 IRP_MJ_SYSTEM_CONTROL 请求转发到下一个较低级别的驱动程序时,驱动程序必须在 IRQL PASSIVE_LEVEL 上运行。

要求

要求
最低受支持的客户端 在 Windows 2000 和更高版本的 Windows 中可用。
目标平台 通用
标头 wmilib.h (包括 Wmilib.h)
Library Wmilib.lib
IRQL PASSIVE_LEVEL (请参阅“备注”部分)
DDI 符合性规则 WmiComplete (wdm)

另请参阅

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT