poFxRegisterDevice 函式 (wdm.h)
PoFxRegisterDevice 例程會向電源管理架構註冊裝置, (PoFx) 。
語法
NTSTATUS PoFxRegisterDevice(
[in] PDEVICE_OBJECT Pdo,
[in] PPO_FX_DEVICE Device,
[out] POHANDLE *Handle
);
參數
[in] Pdo
實體裝置物件的指標, (PDO) 。 此參數指向代表所註冊實體裝置的 DEVICE_OBJECT 結構。 呼叫端是裝置的電源原則擁有者,通常是裝置的函式驅動程式。
[in] Device
呼叫端配置的 PO_FX_DEVICE 結構的指標,其中包含裝置的註冊資訊。 此結構包含設備驅動器所實作之一組回呼例程的指標。 PoFx 會呼叫這些例程來與驅動程序通訊。
[out] Handle
例程寫入句柄的位置指標,代表使用PoFx註冊裝置的句柄。 設備驅動器會將此句柄當做輸入參數傳遞給它所呼叫的其他 PoFxXxx 例程。 驅動程式必須先呼叫 PoFxRegisterDevice ,才能在驅動程式呼叫任何其他 PoFxXxx 例程以電源管理裝置之前註冊裝置。
傳回值
如果例程成功註冊裝置,PoFxRegisterDevice 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列狀態代碼。
傳回碼 | Description |
---|---|
|
Pdo 為 NULL;或 PPO_FX_DEVICE 結構的版本號碼無效或元件計數為零;或為元件指定的閑置狀態數目為零;或閑置狀態的描述無效。 |
|
裝置未就緒。 |
|
資源不足,無法完成註冊。 |
備註
設備驅動器通常會從驅動程式 的IRP_MN_START_DEVICE 要求處理程式呼叫此例程。 驅動程式在裝置收到 IRP_MN_START_DEVICE 要求之前,不得呼叫此例程。 當裝置第一次啟動時,裝置會收到第一個 IRP_MN_START_DEVICE 要求。 裝置在停止資源平衡之後,每次重新啟動裝置時,都會收到額外的 IRP_MN_START_DEVICE 要求。 註冊已註冊裝置的 PoFxRegisterDevice 呼叫是嚴重錯誤,並導致錯誤檢查。 請注意,PoFx 會將裝置結構的深層複本複製到其記憶體中。
在驅動程式呼叫 PoFxRegisterDevice 之前,裝置必須符合下列條件:
- 裝置 (亦即 PDO) 尚未向 PoFx 註冊。
- 裝置處於 D0 (完全處於電源狀態) 。
- 裝置處於執行中狀態。
- 裝置中的每個元件都位於 F0 (完全處於電源狀態) 。
- 每個元件都在使用中條件中。
在驅動程式呼叫 PoFxRegisterDevice 以向 PoFx 註冊裝置之後,裝置中的所有元件都會完全開啟且處於作用中狀況,讓驅動程式可以完成硬體初始化。 若要開始主動式電源管理,驅動程式必須呼叫 PoFxStartDevicePowerManagement 例程。
根據預設, PoFxStartDevicePowerManagement 會將所有元件切換至閑置條件。 如果驅動程式要求元件在電源管理啟動后立即處於作用中條件,驅動程式必須藉由呼叫 PoFxActivateComponent 例程明確地啟動元件,而且此呼叫必須在 PoFxRegisterDevice 呼叫之後,但在 PoFxStartDevicePowerManagement 呼叫之前發生。
一般而言,單一元件裝置的 Kernel-Mode Driver Framework (KMDF) 驅動程式不會呼叫 PoFxRegisterDevice 向 PoFx 註冊裝置。 相反地,當 KMDF 呼叫驅動程式的 EvtDeviceWdmPostPoFxRegisterDeviceDevice 回呼函式時,此驅動程式會收到 PoFx 註冊句柄。 如需詳細資訊,請參閱 支援 Single-Component 裝置的多個功能電源狀態。
如需多元件裝置 KMDF 驅動程式如何向 PoFx 註冊的資訊,請參閱 支援 Multiple-Component 裝置的多重功能電源狀態。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h |
程式庫 | Ntoskrnl.lib |
Dll | Ntoskrnl.exe |
IRQL | PASSIVE_LEVEL |