最近更新

电脑‎ > ‎软件‎ > ‎

Windows启动过程

Windows启动过程:
1)(这一步操作通过BIOS完成,不需要文件系统的干预)
加电自检-->读取MBR-->MBR加载系统卷中的引导扇区,并把控制权交给该引导扇区-->引导扇区读取系统卷根目录并加载NTLDR-->

2)
NTLDR使系统黑屏,
并在其中完成:
CPU模式从16位切换至32位;启动内存分页(Page);-->
如果启动卷(BootVolume)是SCSI硬盘,用Ntbootdd.sys进行I/O操作;-->
读取Boot.ini;-->
启动系统选择菜单;-->
如果选择的是64位系统,则将CPU模式转化位64位;
如果选择DOS系统,则NTLDR加载Bootsect.dos(这是dos引导扇区的副本)-->
NTLDR执行ntdetect.com进行硬件和BIOS信息检测(此处的检查结果会引起“由于硬件变化而无法启动”的现象),并将结果保留在内存,准备以后存于HKLM\hardware\description-->
NTLDR加载注册表System hive(HKLM\system),引动驱动程序,Ntoskrnl.exe,Hal.dll并将控制权交给Ntoskrnl.exe的入口函数-->

3)
Ntoskrnl(屏幕显示Windows徽标)通过两步完成内核子系统的初始化:
           对象(process,thread,driver,etc。)定义和核心数据结构的初始化
           对象初始化和子系统启动
-->I/O Manager按顺序加载“Boot-start”驱动程序和“System-start”驱动程序
-->Ntoskrnl创建会话管理器(SessionManager)进程(\windows\system32\smss.exe),这是第一个用户态进程。
-->smss.exe根据需要执行下列任务:
     运行BootExecute中指定的程序,如autochk,chkdsk等
     处理 Delayed move/rename 命令
     初始化Paging files和其余的注册表项
     加载并初始化内核模式中的Win32子系统(Win32k.sys)
     启动CSrss.exe(Win32子系统在用户模式的部分)
     启动Winlogon.exe
-->Winlogon.exe执行下列任务
     启动LSASS(Local Security Authority)
     加载GINA(Graphical Identification and Authentication)并等待用户登录
     启动Sevices.exe(后台服务管理器)
-->Sevices.exe启动所有标识为自动启动的Win32服务程序
-->Windows启动完成。
-------------------------------------------------------------------------------------------------------

------系统卷和启动卷(windows2000以后的概念)--------
-----这部分内容中,系统卷和启动卷的定义好像与字面的意义相悖,但微软就是这么定义的。系统卷包含启动文件;启动卷包含系统文件。----------

活动分区=系统卷(System Volume),其中包含系统启动的各种文件:
主引导扇区(MBR)包含:
MBR, Boot Sector
NTLDR--NT Boot Loader
NTDetect.com
Boot.ini
SCSI drvier--Ntbootdd.sys

启动卷(Boot Volume)包含:
System files---%SystemRoot%, 也就是windows目录
Ntoskrnl.exe
Hal.dll
etc.

-------------------MBR--------------------------
MBR包含两部分内容:部分可执行代码;分区表(硬盘中的分区情况)。
分区表包含4个条目,第一个标识为活动的分区为系统卷。

--------引导扇区---------
引导扇区不同于MBR。引导扇区和MBR都是在系统安装时写入的。
引导扇区的内容取决于所安装的系统,也就是说Linux,win98,win2000的引导扇区的内容是不一样的。

-----------------Ntbootdd.sys----------------
如果启动卷是在SCSI盘中,需要加载系统卷中的Ntbootdd.sys去读取SCSI盘。
(对于系统卷也是SCSI盘时,NTLDR如何访问Ntbootdd.sys?
BIOS中可能预设了SCSI磁盘的基本访问指令,可以应付,
或者NTLDR有办法访问SCSI盘上的Ntbootdd.sys。
括号内的内容不十分确定。)
但如果要完整地操作SCSI磁盘还是需要加载Ntbootdd.sys。

----------------Hiberfil.sys-------------------------
NTLDR启动后,如果发现系统根目录下有Hiberfil.sys文件并且有效,则NTLDR根据Hiberfil.sys使系统恢复的休眠前的状态,而不处理Boot.ini。

-----------------hive-------------------------------
注册表是由许多文件组成,每个文件成为一个hive。

-----------------引动驱动程序----------------------------
NTLDR只负责将驱动程序相关的sys文件加载到内存中去,并不会去执行初始化的操作。
区别于I/O Manager加载驱动程序。
此时windows的架构尚未启动,所以也没有驱动管理的环境存在。

------------------------驱动程序的加载顺序--------------------------
每个驱动程序的信息都保存在注册表中HKLM\System\CurrentControlSet\Services
类型(type):1=for driver; 2=for file system driver; others=Win32 services
启动方式(start): 0=boot; 1=system; 2=auto; 3=manual; 4=disabled;
(可以在命令行中用driverquery/v看到详细信息)

-----------Delayed move/rename ------------------------------
维护受系统保护的特殊系统文件。

-----------GINA----------------------------------------------------
GINA默认是Msgina.dll,可以进行二次开发。