win2003win2008启动原理及双启动的故障解决
杜 飞
最近经常有学生询问Win2008的启动相关问题以及早期Windows版本与vista或win2008并存时的启动问题,现在可以说正是处于操作系统新旧版本的过滤时期,这类问题会在一定时间内越来越多,所以本人就写了这篇文章来谈论一下新版操作系统的启动原理以及如何解决新旧两种操作系统并存时的故障。
我们还是先来看一下WinXP/2003的启动过程,这个启动过程其实还是挺复杂的,我在此画了一个草图:
当然这个图并没有把整个启动过程中所涉及到的细节都描述出来,但主要部分已经有了,我们在此不进行详细描述,例如:系统自检成功后读取MBR中的前446个字节的引导信息等,这些不是咱们今天讨论的重点,我们只说说较为重要的几点:
其中最为重要一步就是NTLDR:这个程序位于C盘根目录下如图所示:
NTLDR:全称为NTOS Loader,操作系统加载程序。它的主要作用是解析Boot.ini文件,通过读取Boot.ini文件,使系统在启动过程中出现选择菜单,由用户选择希望启动的操作系统。除了NTLDR我们可以看到在C盘根目录下还有一个boot.ini文件,这个文件在xp/2003中也是相当有分量的一个家伙!
BOOT.INI:简称为启动菜单文件,这个文件中存放了我们当前机器中操作的配置信息,安装了几个操作系统?分别位于哪个分区?给用户的选择提示是什么?默认选择时间是多长?等等。
NTLDR除了读取BOOT.INI文件中的启动配置信息之外还会加载并执行C盘根目录下的NTDETECT.COM文件,收集系统的硬件信息,NTDETECT.COM文件会调用BIOS中的内容来得到基本的硬件信息返回NTLDR以供操作系统使用,并将此信息保存到注册表中。
如果上述操作没有问题就会再现我们比较熟悉的进度条了!
然后就是加载Windows的内核文件:NTOS,全称为:NTOSKRNL.EXE文件以及它所依赖的模板文件,如图所示:
再往下就会将程序的执行权交给NTOSKRNL.EXE,下面的工作就由NTOSKRNL.EXE负责了!NTOSKRNL.EXE程序会通过调用一系统的函数,这也是整个启动过程中最复杂的地方,也是最容易出现问题的地方,如果这一部分没有问题,那么就会生成系统的第一个进程:SMSS
SMSS:会话管理子系统 Session Manager SubSystem 这是第一个用户态的进程。会执行一些注册表中某些表键中所定义的操作:如bootexecute、pendingfilerenameoperations、paging file等创建会创建出 CSRSS系统服务器进程和Winlogon登录进程。
CSRSS:Client/Server Runtime Server Subsystem作用:客户端服务子系统,用以控制Windows图形相关子系统,是用户模式Win32子系统的一部分。csrss代表客户/服务器运行子系统而且是一个基本的子系统必须一直运行。csrss用于维持Windows的控制。
Winlogon:Windows登录进程,主要作用是启动LSASS进程(Local Security Authority Subsystem Service);如果是XP还会启动Logonui进程,如果是Win2003就不会生成logonui;出现登录提示框,提示用户输入用户名和密码,然后将些信息交给LSASS进行验证,如果通过就会创建一个访问令牌,最后由userinit程序执行用户登录和初始化脚本,至此,出现桌面后,我们的启动工作就完成了。但在winlogon对用户进行验证的同时还会启动services相关系统服务。
Winlogon的过程其实还是很复杂的,因为中间涉及到用户的认证和授权的问题,在此还是想简单说一说,我们登录系统的方式主要交互式登录、系统登录、网络登录、服务登录和批处理登录。用到最多的有交互式登录、系统登录、网络登录和服务服务,当然用户最熟悉的肯定是交互式登录,也就是人坐在电脑前,与你的爱机直接面对面的“交流”!那么咱们就把交互式登录的过程大体说一下:
首先Winlogon作为登录进程首先出现,准备一个用户登录的环境。然后开始加载一个DLL文件:MSGINA.DLL,此文件作用是在屏幕上出现一个“Ctrl+Alt+Del”的界面,提示用户输入用户名和口令, 然后将收到的信息交给下一个进程:LSASS进程,进行用户身份的认证,当然这里又会有很多问题:工作组用户的认证、单域用户的认证、不同域用户的认证等等,但不论是哪一种情况,都必须由LSASS进程负责认证。其中会涉及到一个服务:Netlogon,此服务主要是验证NTLM的登录、认证。如果是域的环境会帮助客户机更新主机的DNS记录以及定位域控制器,这也就是我们在联系域控制器不成功时为什么重新启动netlogon这个服务的原因!我们抛开过旧的操作系统不谈,那么工作组环境一般使用的认证协议为:NTLM协议,如果是域环境使用的认证协议为:Kerberos V5协议。
NTLM:使用的是挑战/响应模式,过程如下:
首先是客户端发出一个连接请求,请求对方对自己的身份进行认证。但没有传具体口令。
服务器端会给随机发送一个8字节的挑战信息,如:1234567812345678,然后将这个挑战信息和当前session关连起来。
客户端收到挑战信息后进行如下工作:a.根据自己的明文口令经过md4哈希后得到一个16字节的口令散列值;b.然后利用刚才得到的散列值将准备登录的服务器名或者是域名等信息再次进行md5加密得到第二次的hash散列值;c.然后再利用第二次的散列值把8个字节的挑战信息再次进行md5加密,又得到一个16字节散列值;d.最后将这个值作为响应传给服务器。
最后服务器端怎么做,才知道你是不是一个合法用户呢?因为服务器是有你的口令明文的,利用你的口令明文也做相同的操作,如果结果匹配,就认为对方是一个合法的用户!
Kerberos V5主要是对用户的身份进行验证并为用户颁发用于访问网络服务的票证,适合于域等开放环境。认证过程是一个很复杂的过程,在此我只能是简单说说而已。
首先:客户端通过DNS定位KDC服务器
其次:客户端用户使用密码或者是其他方式如智能卡向KDC请求票证授予票证(Ticket-Granting Ticket, TGT),这个请求在登录时会自动完成。要获取特定服务的其他票证,需要票证授予票证。票证授予票证类似于护照。与护照一样,票证授予票证可标识您的身份并允许您获取多个“签证”,此处的“签证”(票证)不是用于出国,而是用于远程计算机或网络服务。
然后:KDC对用户的身份进行验证,如果没有问题可创建票证授予票证,并采用加密形式将其发送回客户机。
再次:客户机使用其口令来解密票证授予票证(TGT),得到有效的TGT后,客户端使用该TGT票证访问授票服务(TGS)。
再次:TGS接着向客户端颁发服务票证。
最后:客户端向所请求的网络服务出示服务票证。服务票证向此服务证明用户的身份。同时也向该用户证明服务的身份。
Winlogon进程
Msgina.dll文件
Netlogon服务
以上只是用草草几句话把Winxp/2003的启动过程作了一个大体的介绍,从其中我可以看到NTLDR和boot.ini起了重要的作用,这也是和Vista/Win2008的不同之处。下面咱们就来看看Vista/2008的启动过程。
我们知道在XP/2003中进行操作系统加载的文件是NTLDR,然后再读取boot.ini文件但这两个文件已经到了寿终正寝的时候了!在VISTA以后的操作系统中我们再也见不到亲爱的NTLDR和Boot.ini了!呜。。。。。。
Vista/2008的启动流程,如图所示:
在这个图中,大家可以看到从系统启动到BIOS到MBR这一部分内容基本上和早期版本操作系统是一样的,不用多说,那么这个PBR是什么东西呢?
PBR:分区引导记录 Partition Boot Record
由Vista 在安装格式时生成的一段代码,由这段代码去找Bootmgr程序,并将程序的执行权交给Bootmgr。那么这个Bootmgr又是个什么东西?
Bootmgr:启动管理器,相当于XP/2003时期的Ntldr,这个程序可以完成操作系统加载,最主要的作用就是读取BCD中的数据,我们知道在XP/2003中启动配置信息都存放在boot.ini文件中,但到了VISTA/2008以后,启动配置信息就放到了BCD中了!
BCD:Boot Configure Data 引导配置数据,它的作用就是用于存放当前机器上的操作系统信息,安装了多少操作系统,每个操作系统所在分区等等。
当Bootmgr成功从BCD中读取出引导信息后就会显示启动菜单供用户选择,然后Bootmgr会将程序的执行权交给Winload.exe
Winload.exe它的的作用是将核心的系统文件加载到内存并加载基本的驱动程序,还有一个新功能就是支持bitlocker在此不做讨论。winload.exe执行成功后,就将执行权交给了系统的内核文件Ntoskrnl。
以上是简单把vista/2008的启动过程大体说了一下,而我们今天的重点讲的是BCD这个东西,这是和XP/2003区别最大的地方了!
刚才我们已经说了BCD保存着启动的相关配置信息,它取代了boot.ini文件,而且存储格式也变化了相当大的变化,以至于我们都不认识它了,它是按照注册表的格式进行保存的,是一个二进制文件,启动成功后也确实要被加载到注册表中,因此也有人说Vista/2008的启动信息存放于注册表中。下面咱们就来认识认识此文件:
BCD文件位于活动分区下的boot文件夹内,如图所示:
那么这个BCD文件是一个二进制文件,我们就不能像boot.ini文件那样对它直接修改了,必须借此一些工具才可以如:控制面板中的系统、msconfig工具、bcdedit.exe工具、wmi开发接口。但在此功能较强的应该是bcdedit.exe和WMI开发接口,但大家最常用的应该是Bcdedit.exe,这个工具也同一般的外部命令一样位于windows下的system32文件夹下,如图所示:
如果我们直接在命令行下执行bcdedit.exe就是显示操作系统配置条目,如图:
那么如果我们使用 bcdedit.exe /? 这就是显示使用方法:
下面给出bcdedit.exe的常用参数:
/createstore 新建空的启动配置数据存储。
/copy 复制存储中的项。
/create 在存储中新建项。
/delete 删除存储中的项。
/deletevalue 删除存储中的项选项。
/set 设置存储中的项选项值。
下面咱们就以一个实例来讲解一下双启动的故障修复
参考图形:
环境描述:先在C盘安装了一个Win2003,然后又在D盘安装了一个Win2008。
分析:那么C盘现在是系统分区,如果用Win2003启动的话,那么启动分区就是C盘,否则就是D盘。虽然2008现在安装在D盘,但还是要向系统分区也就是C盘修改了三个地方:PBR、Bootmgr、BCD。只要安装了Vista或是2008就一定会向系统分区中修改这三个地方。
故障产生:现在C盘的Win2003因为某种原因需要重新安装,那么原来的三个信息PBR、Bootmgr、BCD都没有了,因此D盘的2008不能启动了。
解决方法:只要还原C盘的PBR以及Bootmgr和BCD文件即可!
方法:使用Win2008的安装光盘进行命令行修复模式或者是第三方的小工具!
然后输入命令:bootsect sys /nt60 就会重建PBR的相关信息!
实现过程:利用Win2008安装光秀的命令行修复模式
现在我把C盘的Win2003重新安装一遍。(当然大家用Ghost也可以)安装成功后就直接进入WIN2003,Win2008无法启动!
进入Win2003之后,我们来查看系统分区下的相关文件:
发现只有Ntldr,不见bootmgr和boot文件夹当然也没有BCD信息了!下面我们开始修复:
方法
把载入Win2008的安装光盘。然后启动,如图所示:
点击:修复计算机,出现下图:
显示当前没有找到要修复的操作系统,点击:下一步
点示:命令提示符,出现下图:
出现命令行提示符,但大家注意了这里的盘符是X盘,这是为什么呢?原来这只是一个虚拟出来的盘符,大家可千万不要在此输入修复命令,一定不成功的!我们要切换到真正光盘所在的盘符:
下面我们的操作就在此提示符下进行:
在上图中所用到的命令我已经使用红框做了标记,
其中几个复制命令是为了生成bootmgr以及BCD,bootsect.exe /nt60 SYS是为了更新Win2008的PBR。
最后EXIT退出!
重新启动,不必再手动选择从光盘启动系统也会自动从光盘启动,再进入“修复计算机模式”会自动出现下图所示:
 
选择“修复并重新启动”。重启修复正常后进入Win2008系统。但不能启动Win2003,这是因为BCD中没有Win2003的配置信息,如图所示:
在Win2008系统下用bcdedit.exe 修复双启动菜单,在BCD中加入Win2003的配置信息,相关命令如下:
a. 创建基于ntldr的OS加载器项: /d为用户选择时的提示内容,可以随意输入
bcdedit /create {ntldr} /d “Windows Server 2003”
b. 设置OS所在分区
bcdedit /set {ntldr} device partition=D: (D: 为XP的系统所在分区)
c. 设置OS所使用的ntldr文件位置
bcdedit /set {ntldr} path \ntldr
d. 使此OS项加入到bootmgr界面中
Bcdedit /displayorder {ntldr} –addlast
e. 生成此项的描述信息:
Bcdedit /set {ntldr} description “Windows 2003”
具体操作如图所示:
再次查看就有我们新建的启动项了:
我们可以重新启动计算机,进行测试:
至此,修复操作终于结束了!我的天呀!累死我了!
注意:如果某个节点我们不需要了,也可以删除节点,如:bcdedit –delete {ntldr} -f
那么如果你手头没有Win2008的安装光盘,也可以借助第三方工具来修复和Win2008相关的信息。我在此从网上下载了一个修复工具:BCDautofix,操作起来更为简单!
实现过程:借助第三方工具修复Win2008的启动故障
方法: 从网上下载修复的小工具,如BCDdautofix。
双击BCDautofix.exe 如图所示:
然后重新启动计算机:
出现:
进入系统后发现 bootmgr、BCD等信息都已经回来了!
至此修复成功!不行了,坚持不住了,我去睡觉了!。。。。。。。。。。。。
本文转自 dufei 51CTO博客,原文链接:http://blog.51cto.com/dufei/224899,如需转载请自行联系原作者

谈win2003与win2008启动原理及双启动的故障解决相关推荐

  1. win2003与win2008启动原理及双启动的原理

    win2003与win2008启动原理及双启动的原理 最近经常有学生询问Win2008的启动相关问题以及早期Windows版本与vista或win2008并存时的启动问题,现在可以说正是处于操作系统新 ...

  2. Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法

    这篇文章主要介绍了Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法,需要的朋友可以参考下 由于通过远程访问传文件比较麻烦,就安装了IIS自带的FTP功能,设置好了之后,服务器上可 ...

  3. 安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?

    问题描述 如果你和Ubuntu一起安装,为什么每个人都一直提到在Windows 8上禁用快速启动?是仅针对UEFI计算机推荐的内容还是对旧版BIOS计算机的建议?是因为它使Windows分区无法从Li ...

  4. springboot应用启动原理(一) 将启动脚本嵌入jar

    Spring Boot Takes an opinionated view of building production-ready Spring applications. Spring Boot ...

  5. Oracle RAC 11.2.0.3 节点CRS无法启动报:no network hb 故障解决方法

    软件版本: oracle rac 11.2.0.3,补丁打到最新11.2.0.3.5 故障现象:Oracle双节点组成RAC,RAC软件安装在节点1上:运行一段时间后,节点2日志报"网络通信 ...

  6. macbook win10启动时一直在转圈的故障解决

    昨天上午macbook 的win10还在工作的,中午去吃饭的时候,自动进入休眠状态了.下午来点电源键唤醒它的时候发现微软logo下面的圆圈一直在转,就是进入不了. 然后强按电源键5秒关机,再开机还是一 ...

  7. Slurm作业启动原理

    文章目录 作业启动原理 交互式作业启动 批处理作业启动 分配式作业启动 作业启动原理 ​ 在slurm下,用户可以在三种模式下运行作业. 第一种也是最简单的模式是交互模式,其中stdout和stder ...

  8. android 软启动功能,软启动原理

    导读:本文详细讲述软启动,软启动是一种电动机的启动方式,相对于软启动,当然也有硬启动,硬启动即直接启动,其启动电流远大于电动机的额定电流,对电动机会产生不可逆的损害,为此,软启动应运而生,软启动即一点 ...

  9. Linux启动跟windows启动,Windows,Linux启动机制简介

    前言 本文内容只集中在操作系统启动原理的讲解上,不涉及启动的技术细节,因为这些细节都可以通过网络或者相关代码了解.只有了解了启动原理,才能在分析和解决有关启动的问题时具有针对性,不会有无从下手的感觉. ...

最新文章

  1. Java Native Interface 六JNI中的异常
  2. 利用单臂路由实验VLAN间路由
  3. 数据eda_银行数据EDA:逐步
  4. 百万用户规模的系统如何扩展
  5. af_netlink_2、netlink简介
  6. mysql8支持myISAM_mysql菜鸟手迹8--mysql存储引擎之MyISAM
  7. wpf datepicker 选择时分秒_[Angular 组件库 NG-ZORRO 基础入门] - DatePicker
  8. Intel 64/x86_64/x86/IA-32处理器串行化指令(1) - 概述
  9. oracle 改redo表空间,Oracle临时表空间查看、添加临时表空间数据文件、修改默认临时表空间 方法!...
  10. 在Markdown编辑器中输入上标下标
  11. 用计算机变的魔术,iPhone计算器不为人知的隐藏技能,听说竟然还能用它变魔术?...
  12. 什么是码元(以二进制位来参考)
  13. 梯度下降算法 java_用 Java 实现梯度下降,看这篇就对了!
  14. 4.1.3.9 监听网络状态,3G,WIFI,
  15. win8信息服务器不可用怎么办,win8系统rpc服务器不可用怎么办?提示rpc服务器不可用处理方法介绍...
  16. 用计算机唱樱花下的重逢,抖音樱花树下的重逢是谁唱的
  17. jquery,js实现手机端全屏轮播图手动滑动+自动切换(autoplay)
  18. 基于Kubernetes的DevOps实战培训 | 周五开课
  19. 软件需求——需求规格说明书模版(三)
  20. 相控阵雷达天线与MIMO天线的区别

热门文章

  1. elementUI el-upload上传文件 关闭文件列表
  2. 那些年我失败的当让我依然热血沸腾的创业项目之快递到家这里写自定义目录标题
  3. 锥透镜生成贝塞尔光束ZEMAX光学设计
  4. 使用 Parallel 提高 Linux 命令行执行效率
  5. 记一次电信宽带 接k2p a2刷 openwrt ipv6无法使用问题
  6. 浅谈CPM、CPC、CPA、PFP网站赚钱说明
  7. 【Jodd】Jodd工具
  8. Mesa代码结构分析
  9. 多小区智慧物业管理系统源码
  10. js微信禁用右上角的分享按钮,,和vue中微信页面禁用右上角的分享按钮的问题