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 应从其 DeviceObjectWMI 提供程序列表中删除调用方。
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
指示 中指定的作无效。
STATUS_XXX
指示请求因 NTSTATUS 值指定的原因而失败。 有关实际状态返回代码的详细信息,请参阅 Ntstatus.h。

言论

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

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

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

要求

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

另请参阅

IRP_MN_REGINFO

IRP_MN_REGINFO_EX

IRP_MN_REMOVE_DEVICE

IRP_MN_SURPRISE_REMOVAL