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_REGINFO 或 IRP_MN_REGINFO_EX 请求。 |
WMIREG_ACTION_DEREGISTER | 指定 WMI 应从 DeviceObject 的 WMI 提供程序列表中删除调用方。 |
WMIREG_ACTION_REREGISTER | 指定 WMI 应注销驱动程序,然后注册 (重新注册) 驱动程序。 重新注册驱动程序会导致 WMI 向驱动程序发送 IRP_MN_REGINFO 或 IRP_MN_REGINFO_EX 请求。 |
WMIREG_ACTION_UPDATE_GUIDS | 指定 WMI 应重新查询驱动程序,以获取它为其提供数据的 GUID 标识符的新列表。 这将导致 WMI 向驱动程序发送 IRP_MN_REGINFO 或 IRP_MN_REGINFO_EX 请求。 |
返回值
IoWMIRegistrationControl 从以下列表中返回状态代码:
返回代码 | 说明 |
---|---|
|
指示 WMI 未出错地完成了请求的操作。 |
|
指示 Action 中指定的操作无效。 |
|
指示请求因 NTSTATUS 值指定的原因而失败。 有关实际状态返回代码的详细信息,请参阅 Ntstatus.h。 |
注解
驱动程序调用 IoWMIRegistrationControl 后,WMI 向驱动程序发送 IRP_MN_REGINFO 或 IRP_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。 请注意,如果驱动程序调用 IoWMIRegistrationControl 且 Action 设置为 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) |