处理 WMI 请求
所有驱动程序必须为 DispatchSystemControl 例程设置调度表入口点才能处理 WMI 请求。 如果驱动程序 注册为 WMI 数据提供程序,则必须处理所有 WMI 请求。 否则,驱动程序必须将所有 WMI 请求转发到下一个较低的驱动程序。
所有 WMI IRP 都有主代码 IRP_MJ_SYSTEM_CONTROL 和以下次要代码之一:
IRP_MN_REGINFO, IRP_MN_REGINFO_EX - 在驱动程序调用 IoWMIRegistrationControl 后查询或更新驱动程序的注册信息。
IRP_MN_QUERY_ALL_DATA, IRP_MN_QUERY_SINGLE_INSTANCE - 查询所有实例或给定数据块的单个实例。
IRP_MN_CHANGE_SINGLE_ITEM, IRP_MN_CHANGE_SINGLE_INSTANCE - 请求驱动程序更改数据块实例中的单个项或多个项。
IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION - 请求驱动程序开始为驱动程序注册为成本高昂的块积累数据,或停止为此类块累积数据。
IRP_MN_ENABLE_EVENTS,IRP_MN_DISABLE_EVENTS - 请求驱动程序在启用某个事件时开始发送给定事件的通知,或者停止发送此类事件的通知。
IRP_MN_EXECUTE_METHOD - 请求驱动程序执行与数据块关联的方法。
在驱动程序成功注册为 WMI 数据提供程序后,WMI 内核模式组件会随时发送 WMI IRP,通常当用户模式数据使用者请求驱动程序设备的 WMI 信息时。 如果驱动程序通过调用 IoWMIRegistrationControl 注册为 WMI 数据提供程序,则它必须通过以下方式之一处理每个后续 WMI 请求:
调用内核模式 WMI 库例程 WmiSystemControl。 驱动程序可以调用 WmiSystemControl 来处理仅与不使用动态实例名称的块相关的请求,以及单个基名称字符串或 PDO 的设备实例 ID 上的基本静态实例名称。 有关详细信息,请参阅 调用 WmiSystemControl 以处理 WMI IRP。
在其 DispatchSystemControl 例程中,处理并完成使用指向驱动程序在调用 IoWMIRegistrationControl 时传递的设备对象的指针标记的任何此类请求,并将其他 IRP_MJ_SYSTEM_CONTROL 请求转发到下一个较低的驱动程序。 有关详细信息,请参阅 在 DispatchSystemControl 例程中处理 WMI IRP。
有关 WMI 次要 IRP 的列表,请参阅 WMI 次要 IRP。