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 會從下列列表中傳回狀態代碼:

傳回碼 Description
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要求都已完成為止。 在這種情況下,如果驅動程式在分派例程內針對IRP_MJ_SYSTEM_CONTROL要求呼叫 IoWMIRegistrationControl,呼叫線程將會死結。

例如,如果裝置突然移除 (,在意外移除) 中,導致 PnP 管理員傳送 IRP_MN_SURPRISE_REMOVAL IRP,驅動程式必須呼叫 IoWMIRegistrationControl 並在 通話中指定 WMIREG_ACTION_DEREGISTER。 請注意,如果驅動程式呼叫 IoWMIRegistrationControl ,且 動作 設定為 WMIREG_ACTION_DEREGISTER 以回應 IRP_MN_SURPRISE_REMOVAL IRP,則驅動程式不得對 IoWMIRegistrationControl 進行相同的呼叫,以回應 IRP_MN_REMOVE_DEVICE IRP。

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlIoPassive5 (wdm) LowerDriverReturn (wdm) PowerIrpDDis (wdm)

另請參閱

IRP_MN_REGINFO

IRP_MN_REGINFO_EX

IRP_MN_REMOVE_DEVICE

IRP_MN_SURPRISE_REMOVAL