浅谈Windows 7系统启动过程

前些天,抽空研究了系统封装工具的打包安装机制,也借这个机会把Windows系统启动过程给看了。现在简单做个分享,谈谈对win7启动过程的理解,然后再分析下进程自启动原理,说明系统封装工具是怎么引导的。

如果想了解windows原理,Windows Internals 可能是最好的读物了。这本书在注1提到,有链接可以下载阅读。

好了,回到今天的主题:Win7系统启动过程及进程自启原理。这里,先贴上win7 启动过程的示意图,后面再讲解每个步骤的过程。

windows 7 的启动流程图



windows 7 启动的详细过程
1、电脑加电后,先启动BIOS进行自检,然后加载硬盘的主引导记录MBR,并把控制权交给MBR(MBR在硬盘0磁道的第一个扇区,不属于任何一个分区)
2、MBR读取分区表DPT,找出并 读取活动主分区的引导记录PBR(也叫DBR),PBR再把控制权交给分区下的启动管理器文件BootMgr
3、 BootMgr读取启动配置\Boot\BCD,根据BCD控制显示启动菜单。在选择启动windows 7后,BootMgr将会按设定启动内核加载程序Winload.exe
4、Winload加载内核程序(Ntoskrnl.exe)、硬件抽象层(hal.dll)、注册表SYSTEM项(system32\config\system)、设备驱动,然后控制权交给Ntoskrnl.exe
5、Ntoskrnl初始化执行体子系统,并初始化引导的和系统的设备驱动启动程序,为原生应用程序(如SMSS)初始化运行环境,控制权交给SMSS.exe
6、SMSS初始化注册表,创建系统环境变量,加载Win32子系统(Win32k.sys),启动子系统进程(CSRSS、WinInit、Winlogon),控制权交给WinInit.exe和Winlogon.exe
7、WinInit启动服务控制管理器(SCM),本地安全子系统(LSASS),本地会话管理(LSM)
8、Winlogon加载登录界面程序(LogonUI),显示交互式登录对话框。等待用户登录后,根据注册表配置启动UserInit.exe和Explorer.exe
HKLM\SOFTWARE\Microsoft\WindowsNT\Current Version\Winlogon\Userinit
HKCU/HKLM\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\Shell
9、UserInit启动用户所有自启动进程,建立网络连接,启动生效的组策略
10、Explorer提供交互式图形界面,包括桌面和文件管理。
到这里,windows启动就完成了。

上篇文章提到了系统封装工具,这里说下系统封装工具的引导原理。
windows启动时,Winlogon.exe会启动所有预设的自启动进程,如下:
注册表:
HKLM\SYSTEM\Setup\CmdLine
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies \Explorer\Run
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows \Run
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
如果是64位系统,还会查找以下路径:
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce

文件路径:
\Documents and Settings\All Users\Start Menu\Programs\Startup
\Documents and Settings\<username>\Start Menu\Programs\Startup

通常,系统封装工具的启动项都会记录在 HKLM\SYSTEM\Setup\CmdLine。这是因为, HKLM\SYSTEM\Setup\CmdLine是在显示登录界面之前执行,其他是在用户登录之后执行。
注意了,CmdLine项要配合 SetupType,就是 HKLM\SYSTEM\Setup\SetupType
SetupType值设定如下:
0=什么都不做,直接显示登录界面
1=运行CMDLine,然后重启
2=运行CMDLine,然后显示登录界面

这样,系统启动时就会执行系统封装工具,然后重启,或显示登录界面。

2016/9/5 补充64位系统的启动路径说明
文献资料:
[1] Windows.Internals.5th.Edition David Solomon/ Mark Russinovich
[2] Windows 7 Startup Remah
[3] Troubleshooting the Startup Process Microsoft TechNet
[4] 浅谈 Windows 7 系统启动过程 没有开花的树

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值