WdfDeviceAssignS0IdleSettings 函式 (wdfdevice.h)

[適用於 KMDF 和 UMDF]

WdfDeviceAssignS0IdleSettings 方法會提供驅動程式提供的資訊,讓架構在裝置閑置且系統處於運作 (S0) 狀態時所使用的資訊。

語法

NTSTATUS WdfDeviceAssignS0IdleSettings(
  [in] WDFDEVICE                              Device,
  [in] PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
);

參數

[in] Device

架構裝置物件的句柄。

[in] Settings

呼叫端提供的 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構的指標。

傳回值

如果作業成功, WdfDeviceAssignS0IdleSettings 會傳回STATUS_SUCCESS。 其他傳回值包括:

傳回碼 Description
STATUS_INVALID_DEVICE_REQUEST
呼叫驅動程式不是裝置的電源原則擁有者。
STATUS_INVALID_PARAMETER
偵測到無效的 [設定 ] 值。
STATUS_INFO_LENGTH_MISMATCH
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS結構的大小不正確。
STATUS_POWER_STATE_INVALID
如果發生下列其中一項,則會傳回此值:
  • WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構包含無效的裝置電源狀態。
  • WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構的IdleCaps成員表示裝置可以自行喚醒,但總線驅動程式表示裝置無法喚醒本身。
  • 從在 Windows 8 上執行的 KMDF 1.11 版開始,架構會檢查系統的韌體是否可以在系統完全處於 (S0) 電源狀態時處理喚醒訊號。 如果計算機失敗這項檢查,只要系統維持在 S0 中,WdfDeviceAssignS0IdleSettings 就會傳回 STATUS_POWER_STATE_INVALID,且裝置會完全處於 (D0) 電源狀態。

    在此情況下,驅動程式不應該從 EvtDriverDeviceAdd 或任何其他運行時間回呼傳回錯誤狀態值。 驅動程式最多可能會記錄錯誤,指出裝置會耗用比平常更多的電力。

 

方法可能會傳回其他 NTSTATUS值

如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。

備註

如果驅動程式將 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 的 IdleTimeoutType 成員設定為SystemManagedIdleTimeout 或 SystemManagedIdleTimeoutWithHint,它必須先呼叫 WdfDeviceAssignS0IdleSettings,再從 EvtDeviceD0Entry 傳回。 一般而言,驅動程式會先從 EvtDriverDeviceAdd 呼叫 WdfDeviceAssignS0IdleSettings

您可以隨時呼叫 WdfDeviceAssignS0IdleSettings 。 不過,在驅動程式第一次呼叫 WdfDeviceAssignS0IdleSettings 時設定 IdleTimeoutType 成員的值之後,它不得在稍後呼叫此方法時變更此值。

如果驅動程式在 EvtDriverDeviceAdd (中註冊異步通知,例如呼叫 PoRegisterPowerSettingCallbackIoRegisterPlugPlayNotification) ,則驅動程式後續不得從其註冊的驅動程式回呼例程內呼叫 WdfDeviceAssignS0IdleSettings

如需詳細資訊,請參閱 支援閑置電源關閉

範例

下列程式代碼範例會初始化 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構、設定 10 秒的閒置逾時值,並呼叫 WdfDeviceAssignS0IdleSettings

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS  idleSettings;
NTSTATUS  status = STATUS_SUCCESS;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
                                           &idleSettings,
                                           IdleCanWakeFromS0
                                           );
idleSettings.IdleTimeout = 10000;

status = WdfDeviceAssignS0IdleSettings(
                                       device,
                                       &idleSettings
                                       );
if (!NT_SUCCESS(status)) {
    return status;
}

規格需求

需求
目標平台 Universal
最低 KMDF 版本 1.0
最低UMDF版本 2.0
標頭 wdfdevice.h (包含 Wdf.h)
程式庫 Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 DriverCreate (kmdf) FDOPowerPolicyOwnerAPI (kmdf) KmdfIrql (kmdf) , KmdfIrql2 (kmdf ) , KmdfIrqlExplicit (kmdf) , NonFDONotPowerPolicyOwnerAPI (kmdf)

另請參閱

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings