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 會從下列列表中傳回狀態代碼:
傳回碼 | Description |
---|---|
|
表示 WMI 已完成要求的動作,而不會發生錯誤。 |
|
表示 動作中指定的動作無效。 |
|
表示要求因為 NTSTATUS 值所指定的原因而失敗。 如需實際狀態傳回碼的詳細資訊,請參閱 Ntstatus.h。 |
備註
驅動程式呼叫 IoWMIRegistrationControl之後,WMI會將 IRP_MN_REGINFO 或 IRP_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) |