支援具有單一或多個功能電源狀態的 Multiple-Component 裝置
[僅適用於 KMDF]
多元件裝置的 KMDF 驅動程式可以為每個元件定義一或多個功能電源狀態。
在此情況下,驅動程式會直接向電源管理架構 (PoFx) 註冊。 若要指定 WDF 不應該向 PoFx 註冊,驅動程式會呼叫 WdfDeviceAssignS0IdleSettings,並將 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構的 IdleTimeoutType 成員設定為 DriverManagedIdleTimeout。 一般而言,驅動程式會從其 EvtDriverDeviceAdd 回呼函式呼叫此方法。
接下來,驅動程式必須向PoFx註冊。 若要這樣做,驅動程式會呼叫 PoFxRegisterDevice ,然後呼叫 PoFxStartDevicePowerManagement。 當裝置第一次啟動時,您的驅動程式必須只向PoFx註冊一次。 其中一種方法是從驅動程式提供的 EvtDeviceSelfManagedIoInit 函式呼叫這些例程。 EvtDeviceSelfManagedIoInit 只會在第一次啟動裝置時呼叫。
拿掉裝置時,驅動程式必須呼叫 PoFxUnregisterDevice ,才能從PoFx取消註冊裝置。 若要只取消註冊一次,我們建議驅動程式從驅動程式提供的 EvtDeviceSelfManagedIoFlush 函式呼叫此例程。 只有在移除裝置時,才會呼叫 EvtDeviceSelfManagedIoFlush。 透過在 EvtDeviceSelfManagedIoFlush 中取消註冊,驅動程式在睡眠和重新平衡轉換期間保留電源登錄狀態,且不需要針對在這些轉換期間仍擱置的 I/O 要求維持電源參考。
當驅動程式呼叫 PoFxRegisterDevice 時,它會收到可用來直接與 PoFx 互動的電源註冊句柄(POHANDLE),如下列主題所述:
此外,驅動程式可以直接呼叫 電源架構例程 來傳送電源控制要求,並指定延遲、落地和喚醒需求。
如需PoFx的詳細資訊,請參閱 電源管理框架概觀。