windows pnp/power status Manager(设备 电源状态介绍)

一、先记住两套状态机

Windows有两套电源状态:

系统状态(System Power State)

整个电脑的状态:

复制代码
复制代码
S0
S1
S2
S3
S4
S5

设备状态(Device Power State)

某个设备的状态:

复制代码
复制代码
D0
D1
D2
D3

例如:

  • 网卡
  • USB
  • SSD
  • 摄像头

每个设备都有自己的 D 状态。


二、系统状态 S-State


S0

正常工作

复制代码
复制代码
CPU运行
内存供电
设备供电

就是:

复制代码
复制代码
正在使用电脑

S1

轻度睡眠

CPU停止执行:

复制代码
复制代码
CPU Clock停止

但:

复制代码
复制代码
CPU供电
RAM供电

还在。


唤醒非常快。


现在基本很少见。


S2

比S1更深。

CPU断电:

复制代码
复制代码
CPU Power Off

但:

复制代码
复制代码
RAM仍供电

现代PC也很少使用。


S3(最重要)

传统意义:

Sleep(睡眠)


状态:

复制代码
复制代码
CPU断电
设备断电

但:

复制代码
复制代码
RAM保持供电

因此:

内存内容还在。


恢复时:

复制代码
复制代码
不用重新启动

直接恢复现场。


例如:

笔记本:

复制代码
复制代码
合盖

很多就是:

S3

(现代机器越来越多改成 Modern Standby)


S4(重点)

Hibernate(休眠)


状态:

复制代码
复制代码
RAM内容
写入硬盘

Windows生成:

复制代码
复制代码
hiberfil.sys

然后:

复制代码
复制代码
CPU断电
RAM断电
设备断电

整个机器:

几乎不耗电。


恢复时:

复制代码
复制代码
读取hiberfil.sys
恢复内存

S3 和 S4区别(面试高频)

项目 S3 S4
RAM供电 是 否
功耗 低 极低
恢复速度 快 慢
数据保存位置 RAM 硬盘

S5

Soft Off


也就是:

复制代码
复制代码
正常关机

特点:

复制代码
复制代码
所有程序退出

内存内容丢失:

复制代码
复制代码
RAM清空

再次开机:

复制代码
复制代码
重新启动系统

三、设备状态 D-State

这是驱动面试更爱问的。


D0

正常工作

复制代码
复制代码
设备完全供电

例如:

复制代码
复制代码
网卡工作
SSD工作
USB工作

D1

浅睡眠

部分电路关闭。


恢复很快。


很多设备根本不支持。


D2

深睡眠

关闭更多硬件模块。


恢复比D1慢。


也不常见。


D3

设备关闭

最常见。


又分:

D3 Hot

设备有电:

复制代码
复制代码
还能响应唤醒

例如:

复制代码
复制代码
USB键盘唤醒电脑

D3 Cold

完全断电:

复制代码
复制代码
一点电都没有

四、系统状态和设备状态关系

很多人误解。


不是:

复制代码
复制代码
S3
=
D3

实际上:

系统状态变化时:

Power Manager会协调各设备进入对应状态。

例如:


电脑进入:

复制代码
复制代码
S3

那么:

网卡:

复制代码
复制代码
D3

USB:

复制代码
复制代码
D3

SSD:

复制代码
复制代码
D3

CPU:

停止运行。


五、真实例子

你合上笔记本盖子:

复制代码
复制代码
S3

Power Manager:

发送:

复制代码
复制代码
IRP_MJ_POWER

设备收到:

复制代码
复制代码
IRP_MN_SET_POWER

通知:

复制代码
复制代码
进入D3

网卡:

进入D3


USB:

进入D3


SSD:

进入D3


系统:

进入S3。


六、驱动中的体现

以前 WDM:

会处理:

复制代码
复制代码
IRP_MJ_POWER

例如:

复制代码
复制代码
IRP_MN_SET_POWER

复制代码
复制代码
IRP_MN_QUERY_POWER

KMDF:

一般:

复制代码
复制代码
EvtDeviceD0Entry

进入工作状态。


复制代码
复制代码
EvtDeviceD0Exit

离开工作状态。


七、面试标准回答

如果面试官问:

D0、D3是什么?

你可以回答:

D-State 是设备电源状态。D0 表示设备完全工作;D1、D2 是不同级别的低功耗状态;D3 表示设备关闭状态,其中 D3 Hot 仍保持部分供电支持唤醒,D3 Cold 则完全断电。


如果问:

S3 和 S4区别?

回答:

S3 是睡眠状态,RAM保持供电,系统上下文保存在内存中,恢复速度快;S4 是休眠状态,内存内容写入磁盘 hiberfil.sys,RAM断电,恢复速度较慢但几乎不耗电。


对于 Windows 驱动开发来说,真正需要掌握的是:

复制代码
复制代码
PnP状态机
Power状态机
IRP_MJ_PNP
IRP_MJ_POWER
D0Entry
D0Exit

这几个是面试和实际驱动开发中最常见的电源管理知识点。

相关推荐
Nebula_g8 小时前
JavaSE加强:Stream流
java·开发语言·windows·stream·javase·流
在角落发呆11 小时前
软件配置备份方法:从手动到自动化的实践指南
windows·安全
lingchen190612 小时前
Win 11 系统语言栏悬浮于桌面上影响操作感受,怎么取消?
windows
梅孔立13 小时前
Windows PowerShell 升级 Pi-Coding-Agent + OpenCode,解决 OpenCode 二进制无效报错
windows
东木月15 小时前
Windows C 盘清理指南:安全删除临时文件、缓存与 Prefetch
c语言·windows·安全
水饺编程16 小时前
第1章,[Win32 章节]:Windows 的方方面面
c语言·c++·windows·visual studio
超级大福宝16 小时前
VS Code Remote-SSH 因 RemoteForward 端口冲突导致连接失败的排查与解决
运维·服务器·windows·vscode·ssh
Vex2une17 小时前
Windows PowerShell 发展史:从命令行工具到自动化核心
windows·自动化运维·命令行·powershell·cmd·脚本语言·对象管道
怎么没有名字注册了啊1 天前
Qt开发:MessageBox怎么调出标题栏那个问号按钮?
windows
李子红了时1 天前
EncFS MP中文版汉化下载(免费文件加密工具)
windows·安全