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。 其他返回值包括:
返回代码 | 说明 |
---|---|
|
调用驱动程序不是设备的电源策略所有者。 |
|
检测到 无效的“设置” 值。 |
|
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS结构的大小不正确。 |
|
如果发生以下任一情况,则返回此值:
|
方法可能会返回其他 NTSTATUS 值。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
注解
如果驱动程序将 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 的 IdleTimeoutType 成员设置为 SystemManagedIdleTimeout 或 SystemManagedIdleTimeoutWithHint,则在从 EvtDeviceD0Entry 返回之前,它必须调用 WdfDeviceAssignS0IdleSettings。 通常,驱动程序首先从 EvtDriverDeviceAdd 调用 WdfDeviceAssignS0IdleSettings。
可以随时对 WdfDeviceAssignS0IdleSettings 进行其他调用。 但是,驱动程序在首次调用 WdfDeviceAssignS0IdleSettings 时设置 IdleTimeoutType 成员的值后,它不得在以后调用此方法时更改此值。
如果驱动程序在 EvtDriverDeviceAdd (注册异步通知,例如通过调用 PoRegisterPowerSettingCallback 或 IoRegisterPlugPlayNotification) ,则驱动程序随后不得从其注册的驱动程序回调例程中调用 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) |