在作为设备电源策略所有者(PPO)的驱动程序允许设备进入 D3cold 状态(并且计算机保持在 S0 状态)之前,驱动程序必须验证设备在进入 D3cold 后是否能够响应并继续正常运行。
对于即插即用(PnP)设备,操作系统通常从父总线驱动程序获取有关设备的 D3cold 功能的信息。
例如,如果设备连接到 PCI 或 PCI Express 总线,则设备的 PCI 配置空间包含一个电源管理寄存器块,指示设备的功能。 此模块中的功能标志指定了设备可以从哪些电源状态发出电源管理事件(PCI 术语中的 PME,表示唤醒事件)的信号。 这些状态可能包括 D3hot 和 D3cold。 有关 PCI 电源管理的详细信息,请参阅 PCI 总线电源管理接口规范。
如果设备必须能够从进入的任何低功率 Dx 状态向唤醒事件发出信号,则设备不应输入 D3cold,除非设备、父总线控制器和硬件平台支持从 D3cold 发出唤醒事件信号。
设备的 KMDF 驱动程序调用 WdfDeviceAssignS0IdleSettings 方法,以使设备能够在能够发出唤醒事件信号的最低功率设备电源状态下空闲。 从 KMDF 版本 1.11 开始,WdfDeviceAssignS0IdleSettings 将 D3cold 包括在可能的低功率 Dx 状态范围内。 仅当设备、父总线驱动程序和 ACPI 系统固件支持从 D3cold 发出唤醒事件的信号时,此方法才允许设备在 D3cold 中空闲。
设备的 WDM 驱动程序必须决定在设备空闲时将设备移动到哪个低功率 Dx 状态。 (相比之下, WdfDeviceAssignS0IdleSettings 会自动选择此 Dx 状态,以便驱动程序不必。如果设备必须能够从它输入的任何低功率 Dx 状态发出唤醒事件信号,驱动程序可以调用 GetIdleWakeInfo 例程来确定设备可发出唤醒事件信号的最低电源状态。 若要获取此信息, GetIdleWakeInfo 会查询基础总线驱动程序和 ACPI 系统固件。 根据 GetIdleWakeInfo 中的信息,驱动程序可以调用 SetD3ColdSupport 例程来启用或禁用设备的转换到 D3cold。
设备可能不需要能够从 D3cold 发出唤醒事件信号。 设备可能仅在响应软件启动的操作时,才需要从 D3cold 转换到 D0。 例如,如果驱动程序收到设备的 I/O 请求,驱动程序可能需要唤醒设备。 除了极少数例外,此类设备的驱动程序可让设备进入 D3cold。 一个可能的例外是需要大量时间才能从 D3cold 转换到 D0 的设备。 例如,显示设备可能包含大量内存,这些内存需要在设备进入 D3cold 之前保存,并在设备退出 D3cold 后还原。
有关对 D3cold 的 ACPI 支持的详细信息,请参阅 D3cold 的固件要求。