android 快速启动 hibernate,快速启动与休眠唤醒的区分

快速启动与休眠唤醒的区分

05/10/2021

本文内容

Windows 有三种启动模式:

冷 (传统)

从休眠唤醒

快速 (合并了前两个,在 Windows 8)

为了区分快速启动与从休眠唤醒,内核模式设备驱动程序可以检查系统电源 IRP。

在冷启动期间,启动加载程序通过将 Windows 内核文件的各个部分加载到内存中并链接它们来构造内核内存映像。 接下来,内核配置核心系统函数,枚举附加到计算机的设备,并加载这些函数的驱动程序。

相比之下,快速启动只是将休眠文件 (Hiberfil.sys) 内存中。 快速启动往往比冷启动要少得多。

为了区分快速启动与从休眠唤醒,驱动程序可以检查系统集电源 (IRP _ MN _ SET _ POWER) IRP 中的信息,以通知驱动程序计算机已进入 S0 (工作) 状态。 驱动程序在此 IRP 中的 I/O 堆栈 位置包含 Power 成员,该成员是包含电源相关信息的结构。 从 Windows Vista 开始 ,Power 成员结构包含 SystemPowerStateContext 成员,它是一个 SYSTEM POWER STATE _ _ _ CONTEXT 结构,其中包含有关以前的系统电源状态的信息。 此信息在 SYSTEM POWER STATE _ _ _ CONTEXT 结构的位字段中进行编码。

SYSTEM _ POWER STATE _ _ CONTEXT 结构中的大多数位字段保留供系统使用,对驱动程序是不透明的。 但是,此结构包含两个位字段 :TargetSystemState 和 EffectiveSystemState, 驱动程序可以读取这些字段,以确定是发生快速启动还是从休眠唤醒。

TargetSystemState 和 EffectiveSystemState 位域设置为 系统 _ 电源 _ 状态枚举值。 如果 TargetSystemState = PowerSystemHibernate 和 EffectiveSystemState = PowerSystemHibernate,则会发生从休眠状态唤醒。

但是,如果 TargetSystemState = PowerSystemShutdown 和 EffectiveSystemState = PowerSystemHibernate,则会快速启动。

TargetSystemState 位域指定上次系统电源状态转换,驱动程序将在计算机关闭或进入休眠状态之前接收到系统电源 IRP。 " EffectiveSystemState 位" 字段指示该设备的以前的有效先前系统电源状态,如用户所示。 例如,如果驱动程序收到挂起的系统转换到休眠状态的通知,但随后发生了混合关闭,则 TargetSystemState 和 EffectiveSystemState 值可能不匹配。

准备快速启动

若要为快速启动做好准备,Windows 会执行完整的关闭序列并保存休眠文件。

首先,与完全关闭一样,Windows 会关闭所有应用程序并记录所有用户会话。 在此阶段,没有运行任何应用程序,但已加载 Windows 内核,并且系统会话正在运行。

接下来,电源管理器会将系统电源 Irp 发送到设备驱动程序,告诉他们准备设备进入休眠状态。

最后,Windows 将 (包含已加载的内核模式驱动程序) 中的内核内存映像保存 Hiberfil.sys 并关闭计算机。

如果设备的驱动程序配置设备的方式不同,具体取决于是否发生冷启动或唤醒,此驱动程序应在快速启动后,将设备配置为 "冷启动"。 例如,系统提供的 NDIS 驱动程序在快速启动时禁用微型端口唤醒功能,但在从休眠唤醒时禁用此功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值