前些天,抽空研究了系统封装工具的打包安装机制,也借这个机会把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\Windows NT\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\\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 系统启动过程 没有开花的树

windows 7 的启动流程相关推荐

  1. windows下oracle启动流程,windows下oracle的启动

    windows下Oracle的启动一般是伴随windows自动启动,自动关闭的.但是如果使用任务管理器杀掉了Oracle进程,可以通过命令行方式启动和关闭oracle. 启动oracle服务:C:Do ...

  2. windows下oracle启动流程,笔者设置win7系统手动启动Oracle服务的还原步骤

    相信大部分在使用电脑工作的时候,有时候会遇到win7系统手动启动Oracle服务的问题,最近有很多朋友来向我咨询win7系统手动启动Oracle服务的问题如何解决,针对这一问题,我给大家整理总结出了w ...

  3. Windows 引导启动流程详述(BIOS-UEFI)

    Windows 启动流程详述 BIOS 和 UEFI 的由来 BIOS 存在哪里 BIOS 程序的功能 BIOS 和 UEFI 的发展由来 如何查看当前计算机是什么方式引导启动呢? Linux 下如何 ...

  4. 源码分析-Activity的启动流程

    以android 6.0源码为参考,其他版本api会稍有不同 在Activity中,启动一个Activity的方法 @Override public void startActivity(Intent ...

  5. Centos 6启动流程详解

    author:JevonWei 版权声明:原创作品 Centos6 启动流程 POST开机自检 当按下电源键后,会启动ROM芯片中的CMOS程序检查CPU.内存等硬件设备是否正常运行,CMOS中的程序 ...

  6. JVM启动流程和内存结构

    "Great haste makes great waste" JVM启动流程 JVM是Java程序运行的环境,同时是一个操作系统的一个应用程序进程,因此它有自己的生命周期,也有自 ...

  7. CentOS系列启动流程详解

    一.Linux启动内核文件 1.Linux系统组成 动态视角:内核+根文件系统 静态视角:磁盘分区+相关文件 2.Kernel特点 (1)支持某块化:.ko (kernel object)文件 (2) ...

  8. RedHat开机启动流程

    RedHat 开机启动流程 : 1. LILO 取得控制权. PC 起动时, 会读取开机磁碟第一条 cylinder 的第一个 sector(此即 MBR), 然後它会试着将读取到的程式码载入记忆体中 ...

  9. rhel系统启动过程_Linux 的启动流程

    半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操 ...

最新文章

  1. 2020年中国AI算力报告发布:超大算法模型挑战之下,公共AI算力基建是关键
  2. Linux socket学习
  3. VTK:小部件之SplineWidget
  4. RocketMQ中的Topic和JMS的queue有什么区别?
  5. CentOS 下线,TencentOS Server 全新登陆带来最强支持
  6. NavigationView更改菜单icon和title颜色变化效果
  7. php beast linux安装,windows centos php-beast 安装
  8. C#开源项目一览表[转](包含国内和国外)
  9. 什么叫共轭先验或者共轭分布?
  10. JAVA编程思想课程视频
  11. 2022-2027年中国氮化硼行业市场运行现状及投资战略研究报告
  12. 误差逆传播算法(BP算法)
  13. 快速分割多个视频,生成每个视频的m3u8
  14. Docker Study Note
  15. 手工杀掉双线程、感染所有EXE文件病毒
  16. 盘点那些年BAT字节跳动等互联网公司的程序员、工程师一夜暴富的都市传说
  17. 如何检查浏览器存储中个人证书的存在
  18. [c语言+easyx]GUI界面 年会抽奖系统
  19. 华为携手思迈特软件成立BYOD移动办公联盟
  20. 快速实现一个真正的免费个人免签支付

热门文章

  1. 使用 Eclipse 的 Restore from local history 功能恢复误删除的文件
  2. php获取拼音首字母排序,PHP获取汉字拼音首字母的方法
  3. SPI极性与相位简介
  4. 盛世昊通集团上市美国纳斯达克,产业链或将遍布全球
  5. iOS高仿美团外卖店铺主页
  6. 升级紫光输入法到V5
  7. Spring Boot 大型线上商城项目实战教程
  8. 淘宝镜像下载和安装以及使用
  9. SRS+OBS实现网页HLS直播功能
  10. c盘中可以删除的文件有哪些?