Windows XP 启动过程详解
[预启动阶段]
1>,post过程开机自检:这是每个计算机的电源接通之后,必须要做的第一件事情.post
将检查硬件,是否有内存,是否有键盘以及scsi卡等等.虽然这是一个和操作系统无关的
过程,但是他却是保证系统正常启动的第一个步骤.
2>,一旦自检完成,计算即将查找启动设备,并将MBR mainbootrecord(主引导纪录)调
入内存.
典型故障:开机以后蓝屏,"operating system not found",提
示"invalidpartitiontable"
这些错误信息的出现是因为Mbr遭到破坏;
解决办法:用系统启动盘(软盘或者安装光盘)启动计算机,然后执行下面的命令:
Fdisk.exe/mbr
Fdisk/mbr这个命令可以在硬盘上无条件地写入主引导程序和分区表,并且不对dos引导
扇区Dbr (dos boot record),文件分配表和目录区进行初始化;也就是说,执行
fdisk/mbr后,可在不破坏硬盘上原有数据信息的情况下,重建主引导程序和分区表;他
对单纯感染嵌入式引导区病毒的硬盘,可以起到清除病毒的作用;
Fdisk是msdos,windows95/98/me中的标准命令,windowsNT/2k/XP用户,可以采用下面的
办法修复主引导纪录:
启动系统故障恢复控制台,在命令提示符下面输入fixmbr,在出现警告信息的时候按Y键
,最后输入exit退出故障回复控制台;
3>,计算即将查找活动分区,引导扇区,并将其装入内存;
4>,开始调用Ntldr,Ntldr是系统加载器,他是第二阶段的关键部分;
Plus:Mbr,或者说(masterbootrecord)的缩写,中文意思就是主引导纪录,硬盘的0磁道
第一扇区称为MBR,他的大小是512字节,而这个区域可以分为两个部分:i,preboot区(预
启动区),占446字节:ii,第二部分是partitiontable区(分区表)占64个字节,该区相当
于一个小程序,作用是判断那个分区被标记为活动分区,然后去读取那个分区的启动区,
并运行该区中的代码.最后两个字节是一个标识符,用来表明这个扇区的结束,其二进制
数值为0x55AA.
[启动阶段]
1>,当Ntldr开始运行之后,它首先将处理器的实模式改为32位平滑内存模式;
解释:实模式和32位平滑内存模式:
两者都是电脑系统的寻址方式.实模式指的就是16位模式,运行比较稳定.平滑内存模式
则在寻址范围和速度上有明显的优势.
2>,启动文件系统(例如fat,ntfs),以便从磁盘上访问文件;
3>,随后,Ntldr将访问第一个文件:boot.ini文件,并且根据文件的内容在屏幕上显示启
动菜单;
4>,如果用户选择的不是win2k(或者winXp)操作系统,那么Ntldr将调用bootsect.dos,
将控制权交给她,并且启动所操作的系统,否则,Ntldr将运行Ntdetect.com文件;
[典型故障:]
i,当妳选择了其他操作系统之后,出现了错误信息:I/O error accessing bootsect or
file Muti(0)disk(0)rdisk(0)partiton(1)//BOOTSS
这种情况是由于找不到启动分区造成的,一般出现在安装了多个操作系统的计算机上.
当妳在已有的操作系统例如win98上安装win2k的时候,安装程序会将原有的启动分区(
一般为0分区)保存成bootsect.dos,然后安装程序会将win2k的启动分区放到0分区上.
因此,bootsect.dos是在启动的过程中创建的,无法像其他丢失的文件一样可以从光盘
上面复制过来,那么,如何解决这种情况?
为原来的操作系统重新生成一个启动分区.例如:对于win98,只需要用win98的启动盘启
动系统,然后在命令提示符下输入sysc:,
创建bootsect.dos:
a,将win2k安装光盘放入光驱,启动计算机;
b,在出现欢迎屏幕后,按两次R键;
c,当安装程序运行到修复任务选想的时候,选择"检查启动扇区"选项,然后将光条移动
到"继续(执行所选任务)"上按回车;
d,跟随安装向导继续,最后会看见"安装程序已完成修复"的提示;
e,Reset;
5>,Ntdetect.com将收集计算机硬件方面的信息,这些硬件包括:计算机ID号,适配卡类
型,显卡,键盘以及鼠标,软盘,com口和并口等等.一旦信息收集完成,Ntdetect.com会将
信息传递给Ntldr,并将信息写入注册表中的hkeylocalmachine/hardware分支;
可以看到:启动阶段调用了3个非常重要的文件:Ntdetect.com,boot.ini和
bootsect.dos.而这个过程也是安装了多个操作系统经常出现问题的地方;
[典型故障:]计算机启动时:
没有出现启动菜单;
这种情况是将显示操作系统列表的时间设为0秒引起的.解决的办法是,我的电脑,属性,
高级,启动故障恢复,显示操作系统列表...(修改时间数值),我的解决方法是按F8键进
入,选择操作系统列表。
[典型故障:]当计算机启动的时候出现:
Ntldr is missing,press any key to restart...
Ntldr文件丢失,出现错误会造成这个故障,其它类似的故障还
有,Ntdetect.comismissing..等等,利用下面的解决办法:
利用win2k安装光盘,这个文件存放在系统安装光盘的i386目录下面,因此,只要将其复
制到硬盘就可以了;
a,放入win2k光盘,启动win2k安装;
b,出现欢迎界面的时候,按R;
c,win2k修复选项界面中,按R;
d,当提示选择修复选项的时候,按M;(手动修复)
e,选择验证win2k系统文件;
f,选择继续(执行所选任务),然后回车,
g,出现紧急修复盘界面:如果你有紧急修复盘的话,插入紧急修复盘,根据提示修复安装
,reset;
h,如果没有紧急修复盘,按L,用光盘修复;
使用控制台:输入map,记下win2k安装光盘所在的光驱盘符L;
输入:copy L:/i386/ntldr c:/
提示是否覆盖,Y;
输入exit重新启动;
[内核调用阶段]
1,在这个阶段,Ntldr将调用Ntoskrnl.exe,并将由Ntdetect.com收集的硬件信息传递给
它,同时被调用的还有hal.dll文件.如果你有多个硬件配置文件,当运行到这一步的时
候,你会在屏幕上看到要求选择硬件配置文件的信息.另外,Ntldr也将从注册表中调用
所有启动值为0x0的设备驱动程序.如果你在boot.ini文件中有"/sos"参数,一般
在"/fastdetect"后面,那么妳将看到调用设备列表;
[典型故障]
启动的时候出现错误信息:"Ntoskrnl.exe missing or currupt on bootup"
(ntoskrnl.exe丢失或者损坏)
如果出现下列情形之一,会出现ntoskrnl.exe错误出现:
新增加了一个硬盘或者改变了原有的分区,例如:删除了原来的一个分区或者将原来的
两个分区合并,都可能导致boot.ini文件中的[bootloader]部分的default值丢失或者
无效,从而在启动过程中无法找到启动所需的文件;
Ntoskrnl.exe文件被删除或者被损坏;
[解决办法:]
使用启动盘启动操作系统,编辑boot.ini文件,检察与下面一行类似的命令中是否有错
误:
muti(0)disk(0)rdisk(0)partition(1)
/WINNT="microsoftwindows2000professional"/fastdetect
这一行表示在第一个ide硬盘上rdisk(0)的第一个分区上partition(1)装有win2k,大家
可以根据这个规律来查找自己的boot.ini文件中的数值是否正确;
如果没有发现错误,请将win2k安装光盘放入光驱,然后再命令行输入:
expand x:/i386/ntoskrnl.ex_ c:/ntoskrnl.exe
回车,提示文件已经释放,取出光盘,reset;
[典型故障:]Hal.dllismissing...
这个故障是因为缺少hal.dll文件引起的,解决的办法是:
a,启动故障回复控制台;
b,输入:expand x:/i386/hal.dl_ c:/windows/system32/hal.dll
c,输入exit,回车;
加载内核阶段,ntldr加载称为WindowsXP内核的ntokrnl.exe;系统加载了WindowsXP内
核但是没有将它初始化,接着ntldr加载硬件抽象层(HAL,hal.dll),然后,系统继续加载
HKEY_LOCAL_MACHINE/system键,NTLDR读取select键来决定哪一个ControlSet将被加载
;控制集中包含设备的驱动程序以及需要加载的服务,NTLDR加载
HKEY_LOCAL_MACHINE/system/service/...下start键值为0的最底层设备驱动。当作为
ControlSet的镜像的CurrentControlSet被加载时,ntldr传递控制给内核,初始化内核
阶段就开始了;
2,内核初始化.这一步将对内核以及上一步中调用的硬件驱动程序进行初始化.
初始化过程:
在初始化内核阶段开始的时候,彩色的WindowsXP的logo以及进度条显示在屏幕中央,在
这个阶段,系统完成了启动的3项任务;
1>,内核使用在硬件检测时收集到的数据来创建了HKEY_LOCAL_MACHINE/HARDWARE键;
2>,内核通过引用HKEY_LOCAL_MACHINE/system/Current的默认值复制ControlSet来创
建了CloneControlSet,CloneControlSet配置是计算机数据的备份,不包括启动中的改
变,也不会被修改;
3>,系统完成初始化以及加载设备驱动程序,内核初始化那些在加载内核阶段被加载的
底层驱动程序,然后内核扫描
HKEY_LOCAL_MACHINE/system/CurrentControlSet/service/...下start键值为1的设备
驱动程序,这些设备驱动程序在加载的时候便完成初始化,如果有错误发生,内核使用
ErrorControl键值来决定如何处理....
值为3时,错误标志为危机/关键,系统初次遇到错误会以LastKnownGoodControlSet重新
启动,如果使用LastKnownGoodControlSet启动仍然产生错误,系统报告启动失败,错误
信息将被显示,系统停止启动;
值为2时错误情况为严重,系统启动失败并且以LastKnownGoodControlSet重新启动,如
果系统启动已经在使用LastKnownGood值,它会忽略错误并且继续启动;
当值是1的时候错误为普通,系统会产生一个错误信息,但是仍然会忽略这个错误并且继
续启动;
当值是0的时候忽略,系统不会显示任何错误信息而继续运行;
plus:Hal.dll,是英文hardwareabstractionlayer,硬件抽象层的缩写,这种技术提供了
驱动程序与硬件之间的借口,可以防止应用程序直接访问计算机系统内存,cpu以及硬件
设备(如声卡和显卡),从而使系统可以跨越多种硬件平台运行;
[服务调用阶段]
这个阶段将启动会话管理器(smss.exe),会话管理起将读取必须调用的程序列表,在注
册表的bootExecute项中,然后设置内存分页并且启动win32子系统;
SessionManager启动了WindowsXP高级子系统以及服务,SessionManager启动控制所有
输入,输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕
[win32子系统启动阶段]
一旦win32子系统启动,会自动运行winlogon.exe,同时移动本地安全管理(lsass.exe)
并且显示登陆对话框.然后回运行服务控制器SCreg.exe,服务控制器会检察注册表中启
动值为0x2的服务项目,然后调用这些服务,值为0x3的服务表示需要手动启动,值为0x4
的服务表示禁用;
ServiceController最后执行以及扫描
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Servives来检查是否还有服务需要
加载,ServiceController查找start键值为2或更高的服务,服务按照start的值以及
DependOnGroup和DepandOnService的值来加载;
[用户登陆阶段]
最后就是用户登陆阶段了,一旦用户可以登陆进系统,那么也就表明整个启动过程已经
结束,成功登陆之后,当前设置也被自动保存为"最后一次正确配置lastknowngood"以备
以后使用;
Winlogon.exe启动Local Security Authority,同时WindowsXP Professional欢迎屏幕
或者登陆对话框显示,这时候,系统还可能在后台继续初始化刚才没有完成的驱动程序;
提示输入有效的用户名或密码;