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,驱动程序必须调用 WmiCompleteRequest,以在 WmiSystemControl 返回后完成 IRP。

IrpNotCompleted

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

IrpNotWmi

IRP 不是 WMI 请求(也就是说,WMI 无法识别 IRP 的次要代码)。 如果驱动程序处理此 IRP_MN_XXXIRP_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。 WMI 在 IRQL PASSIVE_LEVEL调用驱动程序的 DpWmiXxx 例程时运行。

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

要求

要求 价值
最低支持的客户端 在 Windows 2000 及更高版本的 Windows 中可用。
目标平台 普遍
标头 wmilib.h (包括 Wmilib.h)
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