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,可以进行二次开发。 |