SET_D3COLD_SUPPORT回调函数 (wdm.h)
SetD3ColdSupport 回调例程启用或禁用到 D3cold 设备电源状态的转换。
语法
SET_D3COLD_SUPPORT SetD3coldSupport;
void SetD3coldSupport(
[in, optional] PVOID Context,
[in] BOOLEAN D3ColdSupport
)
{...}
参数
[in, optional] Context
指向特定于接口的上下文信息的指针。 调用方将此参数设置为接口 D3COLD_SUPPORT_INTERFACE 结构的 上下文 成员的值。
[in] D3ColdSupport
是否允许从 D3hot 转换到 D3cold。 设置为 TRUE 以启用这些转换。 否则,设置为 FALSE。 有关详细信息,请参阅“备注”。
返回值
没有
言论
设备电源策略所有者(PPO)的驱动程序可以调用此例程来启用或禁用对计算机处于 S0 系统电源状态且未准备退出 S0 时可能发生的 D3cold 子状态的转换。
如果设备必须能够从它输入的任何低功率 Dx 状态向唤醒事件发出信号,则此设备的驱动程序不应启用转换为 D3cold 子状态,除非设备可以发出来自此子州的唤醒事件信号。 否则,输入 D3cold 后,设备将不可用,直到计算机重启或从睡眠状态唤醒。
设备的驱动程序可以调用 GetIdleWakeInfo 例程,以确定设备是否可以从 D3cold 发出唤醒事件信号。
如有必要,设备的驱动程序可以进行一系列 SetD3ColdSupport 调用,以替代启用和禁用 D3cold 转换,以响应动态更改的条件。
例如,图形设备在从 D3cold 转换到 D0 后可能具有要还原的大型硬件上下文。 还原此上下文所需的时间可能不可接受,具体取决于用户当前正在执行的任务集。 此外,还原时间可能因此任务组合而异。 驱动程序可能需要在任务组合更改时动态启用和禁用到 D3cold 的转换。
设备只能从 D3hot 子状态输入 D3cold 子状态。 如果驱动程序调用 SetD3ColdSupport 以启用从 D3hot 到 D3cold 的转换,则设备在进入 D3hot 后可能无法输入 D3cold。 为了响应唤醒事件,设备可能会直接从 D3hot 输入 D0,而无需通过 D3cold。
当设备从 D3hot 移动到 D3cold 时,它可能会这样做,因为它与一些其他设备共享的电源已关闭。 这些设备进入 D3cold 后一段时间,其中一台设备的驱动程序可能会请求转换为 D0。 为了响应此请求,父总线驱动程序或 ACPI 筛选器驱动程序打开电源,共享电源的所有设备都进入其默认的开机状态。
唯一需要此电源状态更改的设备驱动程序是请求更改的驱动程序。 其他设备的驱动程序必须收到有关此更改的通知,以便他们可以正确初始化其设备以在 D0 中运行。 只有能够接收此通知的驱动程序才能使其设备进入 D3cold。 否则,驱动程序将不知道设备何时进入 D0。
从 Windows 8 开始,WDM 驱动程序可以在电源框架(PoFx)中注册其设备,并在设备进入 D0 时,DevicePowerRequiredCallback 例程通知。 同样,KMDF 驱动程序可以将设备注册到 PoFx,并通过 EvtDeviceD0Entry 事件回调通知。
如果设备处于唤醒状态,仍可通知未将设备注册到 PoFx 的驱动程序转换为 D0。 当总线驱动程序打开设备的电源时,它们完成驱动程序的 IRP_MN_WAIT_WAKE 请求。 作为响应,驱动程序初始化其设备以在 D0 中运行。
在多个设备共享的电源打开后,其驱动程序请求转换到 D0 的设备可能是其中唯一一个有工作要做的设备。 其他设备可能处于空闲状态,在这种情况下,他们的驱动程序会在一段时间后将这些设备移动到 D3hot。
如果驱动程序调用 SetD3ColdSupport 禁用到 D3cold 的转换,D0 是设备可从 D3hot 输入的唯一设备电源状态。
如果驱动程序调用 SetD3ColdSupport 以启用到 D3cold 的转换,则可能出于其他原因禁用这些转换。 驱动程序可以调用 GetD3ColdCapability 例程来确定设备是否能够进入 D3cold 子州。 但是,驱动程序可能不需要此信息。 如果设备无法进入 D3cold,则调用 SetD3ColdSupport 不起作用,但无害。
SetD3ColdSupport 例程仅影响计算机处于(且未准备退出)S0 状态时可能发生的 D3hot 到 D3cold 转换。 此例程对计算机准备退出 S0 并进入低功率系统状态的情况没有影响。 在计算机进入系统低功率状态之前,D3hot 子状态中的设备可能始终进入 D3cold 子状态。
默认情况下,在首次调用 SetD3ColdSupport 例程之前,将禁用 D3hot-to-D3cold 转换。 若要更改此默认值,以便在第一 SetD3ColdSupport 调用之前启用 D3hot-to-D3cold 转换,设备的驱动程序包可以在安装驱动程序的 INF 文件的 DDInstall.HW 节中包含以下两行:
Include = machine.inf
Needs = PciD3ColdSupported
Windows 8 是支持可在计算机保持 S0 状态时进入和退出 D3cold 子状态的设备的第一个 Windows 版本。 有关详细信息,请参阅 设备 Low-Power 状态。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 8 开始可用。 |
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h) |
IRQL | PASSIVE_LEVEL |