[0.0]Windows启动过程概述
1.x86和x64引导过程中所涉及的组件
1--MBR: 读入和加载分区的引导扇区;
2--引导扇区: 读入根目录,以加载ntldr;
3--NTLDR: 读入Boot.ini,提示引导菜单,加载Ntoskrnl.exe,Bootvid.dll,Hall.dll和引导启动的
设备驱动程序.如果引导的是一个32位系统,则切换到32位保护模式;
4--Ntdetecct: 为ntldr执行硬件检测;
5--Ntbootdd.sys:对于不使用BIOS的SCSI和ATA系统,使用该组件作为磁盘I/O的设备驱动程序;
6--Ntoskrnl.exe: 初始化执行体子系统,并且初始化引导-启动的和系统-启动的设备驱动程序,为系统运行
原生应用程序(native application)做好准备,并且运行Smss.exe;
7--Hal.dll: 内核模式DLL,作为Ntoskrnl和驱动程序与硬件的接口;
8--Smss.exe: 加载windows子系统,包括Win32k.sys和Csrss.exe,并且启动Winlogon进程;
9--Winlogon.exe:启动服务控制管理(SCM),启动本地安全子系统(LSASS),并且显示交互式登录对话框;
10--SCM: 加载并初始化那些自启动的设备驱动程序和windows服务;
2.内核加载的实现过程
MBR包含代码和数据,其中代码称为引导代码,在系统引导时首先获得控制;
MBR中的数据是一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型.
当MBR中的引导代码被执行时候,它检查分区表中的每一个分区,若找到一个已被标记为可引导的分区(称为引导分区),
则将该分区的第一个扇区(称为引导扇区)读到内存中.
然后MBR将代码的控制权交给引导扇区中的代码;
引导扇区,给windows提供有关该硬盘上卷的结构和格式方面的信息,并且读入和加载ntldr.
然后将控制权交给ntldr.
值得注意的是,单个扇区(512b)的代码和数据往往不足以完成其功能.为此,windows让引导扇区中的代码
读入其他上去的数据,然后跳转到下一个扇区的代码.这样的做法相当于蒋第一个引导扇区当做一个loader,
而真正完成引导扇区功能的扇区随后加载进来并执行.
ntldr文件实际是由两部分组成的:
第一部分是实模式代码,即首先获得控制的代码区;这部分代码为切换到保护模式做好准备.然后切换之.
第二部分是一个标准的PE文件,在ntldr中,这部分被称为os loader; osloader是windows真正的32位入口程序.
具体如下:
1.造内存描述符数组
2.映射页面,设置页目录寄存器,打开内存页面映射机制
3.处理boot.in
4.执行ntdetect.com
5.加载内核模块ntoskrnl.exe,hal.dll和SYSTEM hive文件
6.加载引导驱动程序和必要的文件系统驱动程序
7.构造LOADER_PARAMETER_BLOCK参数块
8.将控制权交给ntoskrnl.exe的入口函数
参考资料:
<<深入解析windows操作系统>> 4th
<<windows内核原理与实现>>