共用方式為


在 Multiple-Component 裝置上支援閒置Power-Down

[僅適用于 KMDF]

多元件裝置的 KMDF 驅動程式可以支援 閒置電源關閉 和功能電源狀態。 在此情況下,驅動程式會直接向電源管理架構註冊 (PoFx) ,因此驅動程式必須與 PoFx 協調產生的 Dx 狀態變更。

提供裝置電源原則閒置設定

當它呼叫WdfDeviceAssignS0IdleSettings時,驅動程式必須在WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS結構中將IdleTimeoutType設定為DriverManagedIdleTimeout。 此外,驅動程式必須將 PowerUpIdleDeviceOnSystemWake 設定為 WdfTrue,並將 IdleCaps 設定為 IdleCannotWakeFromS0,如下列範例所示。

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS s0IdleSettings;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&s0IdleSettings, 
                                           IdleCannotWakeFromS0);
s0IdleSettings.IdleTimeoutType = DriverManagedIdleTimeout;
s0IdleSettings.PowerUpIdleDeviceOnSystemWake = WdfTrue;
s0IdleSettings.IdleTimeout = 1;
status = WdfDeviceAssignS0IdleSettings(device, &s0IdleSettings);

從工作 (D0) 轉換為 Low-Power (Dx) 狀態

EvtDeviceSelfManagedIoInit中,驅動程式會呼叫 WdfDeviceStopIdle 以取得電源參考,以防止 WDF 將裝置置於低電源狀態。

驅動程式會從其 DevicePowerRequiredCallback 回呼常式呼叫WdfDeviceResumeIdle來釋放電源參考。

驅動程式通常會指定非常短的閒置逾時,讓 WDF 在釋放所有電源參考之後,將裝置放入低電源狀態。

從 Low-Power (Dx) 轉換至工作 (D0) 狀態

DevicePowerRequiredCallback中,驅動程式必須將裝置帶入其運作 (D0) 狀態。 若要這樣做,它必須延遲背景工作執行緒對 WdfDeviceStopIdle 的呼叫,並將 WaitForD0 參數設定為 TRUE。 此封鎖 對 WdfDeviceStopIdle 的呼叫 不得DevicePowerRequiredCallback中進行。

相反地,驅動程式必須延遲對被動層級執行之背景工作執行緒的封鎖呼叫,而且保證不會在受電源管理佇列的 I/O 分派常式內容中進行 WdfDeviceStopIdle 呼叫。

如果驅動程式先前稱為 WdfDeviceInitSetPowerPageable (表示它可以在電源轉換期間存取可分頁資料) ,驅動程式可以呼叫 WdfWorkItemCreate 來建立架構工作專案。 如果驅動程式尚未設定可分頁電源,驅動程式必須建立自己的系統執行緒。 如需詳細資訊,請參閱 PsCreateSystemThread

WdfDeviceStopIdle傳回之後,即使方法傳回錯誤,驅動程式也必須呼叫PoFxReportDevicePoweredOn