IoWMIRegistrationControl 函数 (wdm.h)

IoWMIRegistrationControl 例程将调用方注册或注销为指定设备对象的 WMI 数据提供程序。

语法

NTSTATUS IoWMIRegistrationControl(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] ULONG          Action
);

参数

[in] DeviceObject

指向设备对象的指针。 此对象是 一个DEVICE_OBJECT 系统结构。

[in] Action

WMI 应执行的操作。 请求的操作由以下值之一指示。

操作值 含义
WMIREG_ACTION_REGISTER 指定 WMI 应将调用方注册为 DeviceObject 的 WMI 提供程序。 这将导致 WMI 向驱动程序发送 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求。
WMIREG_ACTION_DEREGISTER 指定 WMI 应从 DeviceObject 的 WMI 提供程序列表中删除调用方。
WMIREG_ACTION_REREGISTER 指定 WMI 应注销驱动程序,然后注册 (重新注册) 驱动程序。 重新注册驱动程序会导致 WMI 向驱动程序发送 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求。
WMIREG_ACTION_UPDATE_GUIDS 指定 WMI 应重新查询驱动程序,以获取它为其提供数据的 GUID 标识符的新列表。 这将导致 WMI 向驱动程序发送 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求。

返回值

IoWMIRegistrationControl 从以下列表中返回状态代码:

返回代码 说明
STATUS_SUCCESS
指示 WMI 未出错地完成了请求的操作。
STATUS_INVALID_PARAMETER
指示 Action 中指定的操作无效。
STATUS_XXX
指示请求因 NTSTATUS 值指定的原因而失败。 有关实际状态返回代码的详细信息,请参阅 Ntstatus.h。

注解

驱动程序调用 IoWMIRegistrationControl 后,WMI 向驱动程序发送 IRP_MN_REGINFOIRP_MN_REGINFO_EX 请求,以便驱动程序可以向 WMI 提供信息。 有关详细信息,请参阅 注册为 WMI 数据提供程序

如果调用方为 Action 指定 WMIREG_ACTION_DEREGISTER,IoWMIRegistrationControl 会导致调用线程被阻止,直到之前发送到指定设备对象的所有 IRP_MJ_SYSTEM_CONTROL 请求都已完成。 在这种情况下,如果驱动程序在调度例程中为IRP_MJ_SYSTEM_CONTROL请求调用 IoWMIRegistrationControl,则调用线程将死锁。

例如,如果 (突然删除设备,则在意外删除) 导致 PnP 管理器发送 IRP_MN_SURPRISE_REMOVAL IRP 时,驱动程序必须调用 IoWMIRegistrationControl 并在调用中的 操作 中指定WMIREG_ACTION_DEREGISTER。 请注意,如果驱动程序调用 IoWMIRegistrationControlAction 设置为 WMIREG_ACTION_DEREGISTER 以响应IRP_MN_SURPRISE_REMOVAL IRP,则驱动程序不得在响应 IRP_MN_REMOVE_DEVICE IRP 时对 IoWMIRegistrationControl 进行相同的调用。

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlIoPassive5 (wdm) LowerDriverReturn (wdm) PowerIrpDDis (wdm)

另请参阅

IRP_MN_REGINFO

IRP_MN_REGINFO_EX

IRP_MN_REMOVE_DEVICE

IRP_MN_SURPRISE_REMOVAL