Windows NT系统启动顺序

原文地址: http://att2.blogbus.com/logs/27491423.html


NT系列的操作系统启动顺序如下:

1.电脑的系统启动模块调用NT系统启动程序,OS Loader组件传递一个BootRecord结构体给该程序。NT系统启动程序执行全局初始化工作,然后决定操作系统启动分区,初始化工作还包括初始化启动过程中使用到的内存描述符。NT系统启动程序也调用一个堆初始化程序,该程序创建内存描述符,这样在启动的以后阶段启动程序能够使用内存。

2.系统启动程序调用Boot loader 开始程序。系统启动程序并不希望Boot loader开始程序执行返回,因为Boot loader执行返回的话,代表系统启动失败。

Boot loader启动程序打开启动分区(由NT系统启动程序提供),读取其中的Boot.ini文件。Bootloader启动程序中包含一些能够识别NTFS,CDFS,HPFS分区的代码。由于标准文件系统驱动没有被装载,Boot loader使用硬编码的文件系统代码。

到目前为止,Boot loader启动程序将调用一个实模式的BIOS中断,该中断将视频适配器设置为80*50,16位色的字符模式,同时也将屏幕清空。

Bootloader启动程序读取boot.ini中的所有内容,并且把内容显示给用户。如果Boot.ini文件为空,缺省的操作系统为NT,缺省的启动路径设置为C:\winnt

Boot loader启动程序然后试着将用户提供的启动为止和Boot.ini文件中的内容相匹配。如果没有指定缺省选项,则搜索缺省启动路径。如果Bootloader启动程序没有找到匹配的选项,缺省的启动位置设定为C:\winnt

如果用户选择的内核路径为C:\,NT Loader启动程序则假设用户希望启动DOS,Windows 3.x,Windows 95,或者OS/2,因此它将读取bootsect.dos文件,并且将系统重新启动到选择的系统中。

如果启动位置显示用户希望启动Windows NT,Bootloader将读取跟目录下的ntdetect.com文件,如果ntdetect.com文件找不到,或者该文件的尺寸不对或者该文件的校验错误,启动将失败。如果该文件是有效的启动文件,它将被读入内存。系统将使用硬件制造商提供的服务探测当前的硬件配置信息。

到现在为止我们已经进入系统启动的第二阶段。OS loader启动程序现在初始化SCSI启动驱动程序,ntldr.exe程序被装载到内存。

3. os loader程序打开控制台输入输出设备以及系统启动分区。同时它将在控制台上显示OS loader的ID信息,OS Loader4.0。

loader使用启动分区的信息生成ntoskrnl.exe的完全路径,并将其装载到内存中。然后OS loader将HAL.dll装载到内存中。HAL文件将平台依赖性与剩余的Windows NT Executive隔离开来

到目前为止,这两个文件引入的所有dll文件都被装载到内存。现在OS loader将从NT注册表装载SYSTEM主键。loader现在已经知道是装载LastKnownGood Control Set还是装载Default Control set。

为了将SYSTEM hive装载到内存中,OS loader尝试打开System32\config目录下的SYSTEM文件,如果读取失败,则尝试读取SYSTEM.alt文件。如果再次失败的话,操作系统启动失败。如果这两个文件都读取成功的话,校验文件内容,同时在内存中生成并且初始化相应的数据结构。这时System loader block被指向内存中的System Hive,并且最终将传递给系统文件。

接下来OS loader决定需要装载到内存中的boot驱动,其中就包含负责启动分区文件系统的驱动程序。决定了需要装载的boot驱动之后,OS loader根据ServiceGroupOrder将这些驱动排序。同一个组内的驱动按照注册表中的GroupOrderList排序。

决定驱动装载顺序后,所有的驱动将被装载。如果装载过程中出现错误,注册表中的ErrorControl值将被检查。如果失败的驱动是一个关键驱动,系统启动失败。否则OS loader继续装载其他的 boot 驱动。

接着OS loader准备执行已经装载的系统可执行文件ntoskrnl.exe,并且把控制权装相NT kernel的入口。

4. 在系统启动的第3~5阶段,不同的NT Executive 组件和NT Kernel将被初始化。系统启动的第5阶段,StartValue为1的驱动将被自动装载。

在系统初始化第3阶段,Kernel syetem 启动程序调用KiInitializeKernel()函数(该函数是ntoskrnl,exe的入口函数)。这个函数初始化处理器控制块结构(PCB),内核数据结构以及Idle线程和进程对象,接着调用NT Executive初始化程序。用于保护内核数据结构和内核链表的自旋锁在这里被初始化。各种内核链表(DPC队列链表、定时器通知链表、不同的线程链表以及其他相似的内核数据结构)也在这里初始化。

一旦内核idle线程初始化 完成,Executive 初始化程序就在该线程上下文中调用。NT Executive和NT Executive的各种子组件初始化过程需要两个阶段。在Executive的初始化第0阶段,下列子组件初始化他们的内部状态:

-硬件抽象层(HAL)

-NT Executive 组件

-虚拟内存管理器(VMM)

内存管理器的Paged pools,NonPaged Pools、页桢数据库、页表入口(PTE)管理结构,不同的VMM资源如互斥体和自旋锁数据结构都在这个阶段初始化。VMM也在该阶段初始化NT 系统缓存相关的数据结构,包括系统缓存工作集和各种用于管理系统缓存的VMM数据结构。

-NT 对象管理器

-系统安全子系统

-进程管理器

在NT Executive初始化的第0阶段,初始化系统进程被创建。而idle进程由Nt kernel在Executive初始化开始之前创建。系统进程也在此时创建。在初始化的第1阶段,进行NT Executive剩余部分的初始化,这些初始化工作是在属于系统进程的线程上下文中完成的。

在NT Executive和各种子组件初始化的第1阶段,各种中断被禁止,初始化工作线程等级被提升到高权限以防止线程抢占。同时在初始化第1阶段,系统已经是功能完全了,各种子组件都能够执行各自的初始化操作:

-硬件抽象层被调用完成初始化

-系统时间和日期被初始化

-在多处理器系统上,其他的处理器开始工作

-对象管理器、Executive子系统、安全子系统被调用完成各自的初始化工作

-VMM第一阶段初始化执行

此时内存映像功能初始化完毕并且可用。VMM线程开始运行。此时的VMM已经是功能初始化完毕,可以为其他系统组件服务

-VMM初始化完毕后NT缓存管理器开始初始化

在缓存初始化阶段,需要执行异步I/O操作的工作者线程数目就被定了下来。缓存管理器的链表结构和同步资源被初始化。

-配置管理器被调用进行初始化

配置管理器管理者NT注册表。在初始化这个阶段,配置管理器使\REGISTRY\MACHINE\SYSTEM和\REGISTRY\MACHINE\HARDWARE可用。配置管理器将由Ntdetect.com和OS loader得到的信息填写到SYSTEM和HARDWARE中。一旦这个初始化阶段完毕,注册表命名空间就对其他系统组件可用,特别是将要装载的其他内核驱动。

-NT i/o管理器被调用进行初始化

NT I/O管理器开始初始化它的内部状态对象,包括同步数据结构、链表、内存池。然后I/O管理器使用内部函数ObCreateObjectType()注册所有它内部定义的对象类型(如:适配器对象,控制器对象、设备对象、驱动对象、I/O完成对象和文件对象)。I/O管理器也在对象命名空间中创建\Device,\DosDevice和\DriverRoot目录。

接下来I/O管理器初始化由OS loader装载的boot驱动,主要包括:调用驱动的DriverEntry程序执行驱动的初始化。Raw文件系统也在此时装载。此时装载的另外一个文件系统驱动是启动分区文件系统驱动。接着StartValue为1的驱动被装载并且初始化。

5. 到现在为止,系统启动过程的3~5阶段已经完毕。需要注意的是NT Executive是在系统进程的系统工作线程内初始化的,该进程由NT Kernel创建。该线程现在变成存储管理器(MM)的Zero Page线程,该线程现在的等级非常低,用来异步地将VMM设定在Free list上的页清0。正如你将看见的,所有的页在使用之前都将被清0,这使得系统符合C2安全等级标准。

6. 系统在现在初始化完毕。在系统启动的6~8阶段,不同的子系统将得到初始化,SCM将装载其他的服务,主要是Start Value为2的内核模式驱动。

 

 Window(NT)启动过程

一.Windows系统构架

1.先加载内核模式的各种管理服务和子系统,然后再加载用户模式的各种服务。

2.用户模式的程序、服务通过NTDLL.DLL调用内核模式的各种系统功能

3.硬件抽象层(HAL.DLL)提供了Windows系统对底层硬件统一、透明的访问

二。重要术语和注意事项
1.系统卷(System Volume):
包含了如下重要文件的磁盘分区:
Master Boot Record(MBR) 
Boot sector 
NTLDR 
Boot.ini 
SCSI driver-Ntbootdd.sys 
 
2.启动卷(Boot Volume)
包含系统文件的分区(%systemRoot%),包含Ntoskrnl.exe,Hal.dll等重要文件
 
三。Windows启动过程


1.开机,系统加电
2.BIOS自检
表象:显示器上依次显示显卡信息(如果为非内置),主板Logo,主机详细硬件配置信息(IDE设备、中断资源分配信息等)
3.BIOS读取MBR(固定地址)
 MBR中包含分区表
4.在MBR中寻找第一个被标识为活动的分区(系统卷)
 
注:BISO中的引导信息和MBR中的内容都是在安装操作系统时进行的。
 
5.MBR通过磁盘读取方式加载NTLDR(NT Loder)
6.BIOS将控制权交给NTLDR
表象:显示器显示黑屏
7.NTLDR进行了如下操作:
将系统从16位模式切换到32位模式 
开启(内存)分页管理 
如果启动卷为SCSI磁盘,从系统卷上读取Ntbootdd.sys对SCSI磁盘进行I/O操作、检测 
查找启动卷中是否包含有效的Hiberfil.sys文件,如果有效,跳过如下步骤,直接读取Hiberfil.sys中的信息到内存中,是系统恢复到休眠前的状态 
表象:显示器显示系统(从休眠状态)重新启动状态条
 
读取并且分析boot.ini文件,如果boot.ini中存在多个条目(并且在windwos中设置了开机显示启动列表),则显示启动列表。表象:显示器上显示多启动选择列表 
 
8.如果选择了启动DOS:加载BOOTSECT.DOS文件供DOS引导
   如果选择启动64为操作系统,NTLDR将CUP周期切换到64位
 
9.如果用户在此时按了F8键,将出现高级启动选项列表。
表象:显示器上显示高级启动选项列表(安全模式、命令行模式、最后一次正确配置等等)
10.NTLDR调用Ntdetect.com进行硬件和BIOS信息的检测(将结果保存到HKLM\Hardware\Description)
11.NTLDR加载注册表System hive文件,根据HKML\System指定的驱动程序(*.sys)拷贝到内存中
12.NTLDR加载Ntoskrnl.exe文件
13.NTLDR加载Hal.dll文件
14.NTLDR将其从boot.ini中读取的各种参数(包含用户按F8后进行的选择),传递给Ntoskrnl.exe,将控制权转给Ntoskrnl.exe的入口函数
 
表象:显示器上显示Windows启动Logo及加载滚动条
15.Ntoskrnl.exe通过两个阶段完成内核子系统的初始化
第一阶段完成对象定义(process,thread,driver等)和核心数据初始化
第二阶段完成对象初始化和子系统的启动
16.Ntoskrnl.exe调用I/O Manager按顺序加载"boot-start"驱动程序和"system-start"驱动程序
17.Ntskrnl.exe创建会话管理器(Session Manager)
(\Windows\System32\Smss.exe)(这是windows创建的第一个进程,处于用户态)
 
P.S.驱动程序的加载顺序
1.所有驱动程序的信息都被保存到了注册表(HKLM\System\CurrentControlSet\Services)中
2.加载类型(Type键值标识)有:1 for driver, 2 for file system driver, others are Win32 services
3.启动方式(Start键值标识)有:0=boot, 1=system, 2=auto, 3=manual, 4=disabled
注:可以使用driverquery命令查看驱动的加载信息
 
 
18.Smss.exe进行如下操作:
 运行BootExecute中指定的程序,如autuchk,chkdsk等 
处理"Delaved move/rename"命令(安装补丁重启后根据记录移动或重命名相应的文件) 
初始化分页文件和其余注册表项 
加载并且初始化内核模式中的Win32子系统(Win32k.sys) 
启动Csrss.exe(Win32子系统在用户模式下的部分) 
启动Winlogon.exe(准备登录) 
 
表象:显示器上显示登录窗口
19.Winlogon.exe进行如下操作:
启动LSASS(安全管理) 
启动GINA并等待用户登录(登录框):默认的GINA是Msgina.dll,可自行开发GINA来实现基于生物信息的用户登录(指纹识别等) 
启动Services.exe(后台服务管理器) 
20.Services.exe启动所有标识为自动启动的Win32服务程序


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值