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。 其他返回值包括:

返回代码 说明
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) 电源状态时处理唤醒信号。 如果计算机在此检查失败,WdfDeviceAssignS0IdleSettings 将返回STATUS_POWER_STATE_INVALID,并且只要系统保持 S0,设备将完全处于 (D0) 电源状态。

    在这种情况下,驱动程序不应从 EvtDriverDeviceAdd 或任何其他运行时回调返回错误状态值。 驱动程序最多可能会记录一个错误,指示设备将消耗比平常更多的电量。

 

方法可能会返回其他 NTSTATUS 值

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注解

如果驱动程序将 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGSIdleTimeoutType 成员设置为 SystemManagedIdleTimeoutSystemManagedIdleTimeoutWithHint,则在从 EvtDeviceD0Entry 返回之前,它必须调用 WdfDeviceAssignS0IdleSettings 通常,驱动程序首先从 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;
}

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfdevice.h (包括 Wdf.h)
Library 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