a. NTLDR将计算机微处理器从16位实模式转换为32位保护模式,在实模式中,系统为ms-dos保留640KB内存,其余内存视为扩展内存,而在32位保护模式中,系统视所有内存为可用内存
b. 启用cpu的内存分页机制,即pagefiles.sys文件
c. 检测硬盘类型,若为SCSI类型,则加载Ntbootdd.sys用于访问磁盘,否则使用INT13访问磁盘
d. 如果发现系统跟目录下有Hiberfil.sys文件且有效,那么NTLDR将读取这个文件的信息并恢复休眠前的状态,这时他不会处理boot.ini文件。(hiberfil.sys是系统休眠功能占用的硬盘空间,休眠时电脑把所有内存中的内容转移到硬盘中并关闭电脑)
e. 加载Boot.ini,选择操作系统,若没有上述的hiberfil.sys文件,则读取boot.ini文件,这时我们会看到操作系统选择的界面,如果用户按f8进入操作系统的启动菜单选项并选择了dos,那么NTLDR将加载Bootsect.com,这时DOS使用的引导扇区副本。
f.加载硬件检测,即执行ntdetect.com,将调用BIOS收集计算机硬件信息列表并保存到HKLM下的hardware中,硬件检测完成后,进入配置选择阶段,如果计算机上有多个硬件配置文件列表,可以通过上下按钮来选择,如果只有一个硬件配置文件,则计算机不显示此屏幕 ,直接用默认的配置文件加载windows xp
g. 加载内核阶段。在这个阶段中,NTLDR紧挨在注册表引导驱动程序,准备将系统控制权交给windows内核的ntoskrnl.exe,接着NTLDR加载硬件抽象层HAL.dll,然后系统继续加载HKLM下的system键,NTLDR读取select键来决定哪个Control set将被加载,控制集中包含设备的驱动程序和需要加载的服务
NTLDR加载HKLM下的system下的service下的Start键值为0的最底层设备驱动,当作为control set的镜像的current control set被加载时,NTLDR传递控制给内核,执行ntoskrnl.exe的入口函数,初始化内核阶段开始。
3. 内核初始化(Ntoskrnl.exe)
在初始化内核阶段开始的时候,彩色的windows的logo和进度条显示在屏幕上,在这个阶段,windows完成了启动的4项任务:
a. 完成对象定义和核心数据结构初始化,使用在硬件检测时收集到的数据来创建HKLM\system\Hardware键。
b. 完成对象初始化和子系统启动,通过引用HKLM\system\Current的默认值Control Set来创建了Clone Control Set。Clone Control Set配置是计算机数据的备份,不包括启动中的改变,也不会被修改,以上两个过程由随后生成的System Idle Process内核系统线程来完成
d. ntoskrnl创建会话管理进程:Session Manager(smss.exe) ,启动了windows高级子系统和服务。session manager启动控制所有输入输出设备和访问显示器屏幕的win32子系统和Winlogon进程,初始化内核完毕。
4. SMSS.exe文件
a. 运行BootExecute中预定程序,例如autochk,chkdsk等
b.处理Delaved move/name命令
c. 初始化pagingfiles和区域的注册表项目
d.加载并初始化内核模式中的win32子系统win32k.sys
e启动csrss.exe(win32子系统在用户模式的部分)
f. 启动Winlogon.exe登陆系统
a. 启动lsass(本地安全管理组件)
b. 加载logoui组件,显示登录对话框,等待用户登录,logoui组件可以进行二次开发,通过自己开发,可以进行基于质问、声音等生物信息的登录,默认logoui组件式Msgina.dll
c.启动service.exe后台服务,它启动所有标示为自动启动的服务,这时我们在任务管理器中会看到很多svchost
d. 登录成功,加载shell显示桌面。
至此windows启动完成,从上面的步骤看来实际是控制权的逐步移交过程:MBR---Bootsector---NTLDR---Ntoskrnl---Winlogon---Shell