WdfDeviceAssignS0IdleSettings 函数 (wdfdevice.h)
[适用于 KMDF 和 UMDF]
WdfDeviceAssignS0IdleSettings 方法提供驱动程序提供的信息,框架在设备处于空闲状态且系统处于工作状态时使用该信息。
语法
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,则必须先调用 WdfDeviceAssignS0IdleSettings,然后才能从 EvtDeviceD0Entry返回。 通常,驱动程序首先从 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) |
库 | Wdf01000.sys(KMDF):WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate(kmdf)、FDOPowerPolicyOwnerAPI(kmdf)、KmdfIrql(kmdf)、KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)、NonFDONotPowerPolicyOwnerAPI(kmdf) |