Vista的MBR磁盘签名(Disk Signature) (转帖)
原帖:Vista的MBR磁盘签名(Disk Signature)_存梦_新浪博客 http://blog.sina.com.cn/s/blog_6fed14220100qq71.html
存梦发表于(2008-05-28 14:45:28)
和以前的Windows相比,Vista引导操作系统和它使用磁盘MBR中的磁盘ID号的方式都有所不同。这个ID号从NT 3.5开始就有了,这个ID号位于MBR扇区的0x1B8偏移处,也就是启动代码和分区表之间,其长度为4字节。它也被称为错误容忍签名(Fault Tolerance Signature),现在通常被微软称为磁盘签名。在以前的NT操作系统中,对ntldr发起Windows启动过程来说,磁盘签名的完整性通常都不是至关重要的。然而对于Vista来说,如果签名被改掉或找不到,那么bootmgr(Vista中ntldr的接班人)将在Windows启动之前挂起(halt),并显示错误信息“winload.exe..... is missing or corrupt.”事实上,这是一条不准确的并有误导性的错误消息,因为winload.exe并没有被移动或修改。如果我们修改签名的某一位就会显示winload.exe错误,如果再改回来Vista又可以正常启动了。
磁盘签名的最初目的主要是与正在启动的或已经启动的操作系统能唯一识别单个的硬盘有关,比如用于错误容忍的动态硬盘软件RAID配置,在boot.ini文件中放置SCSI硬盘的磁盘标签以启动Windows,帮助NT跟踪维护盘符的分配等等。除了这些之外,磁盘签名对于Vista有着新的意义,它对Vista的启动过程至关重要。
Vista MBR
在Vista之前磁盘签名可以是字母和数字的任意组合,只要和机器中已有的磁盘签名不同就可以,在Vista中,这个规则看起来并没有改变。
为了启动一个操作系统,首先必须加载并运行启动加载器(bootloader)。Vista中,这个工作由bootmgr完成,通过BCD数据来查找启动加载器的位置。以前的NT操作系统有些许差别,因为ntldr既是启动管理器又是启动加载器,对它来说,主要的任务是查找操作系统文件所在的位置。ntldr和bootmgr的首要任务都必须是识别它们应该去哪个硬盘上寻找所需的文件。ntldr通过boot.ini文件的帮助来实现,这个文件列出的硬盘号和计算机BIOS看到的硬盘号顺序一致,ntldr首先获得用户选择启动项对应的硬盘号,然后检查BIOS来找到对应的位置。在Vista中,BCD数据不会包含硬盘号,而是它们唯一的磁盘签名。当bootmgr通过BCD数据获得对应的磁盘签名后,它就遍历所有连接的磁盘知道发现具有这个磁盘签名的硬盘。如果没有找到匹配的硬盘,bootmgr就没法找到Vista的启动加载器(winload.exe),从而显示错误信息“winload.exe..... is missing or corrupt.”
因此现在磁盘签名对于启动过程来说至关重要,必须为bootmgr维护好。如果签名改变了,那么BCD中所有的跟这个磁盘相关的启动选项都必须更新,以包含最新的磁盘签名。如果签名被清零,那么必须产生一个新的签名写到磁盘上,同时通知BCD模块。对于普通用户来说,很少有情况使得操作会修改或破坏磁盘签名,因此这整个过程都是透明的。然而,在使用克隆工具或安装多操作系统时可能会出现问题。
除了磁盘签名外,BCD还包含了更多关于磁盘分区位置的信息,这些信息也被bootmgr用来查找winload.exe。如果一个分区在磁盘的起始位置发生变化,bootmgr也将找不到这个分区,从而也不能定位winload.exe。
Vista的MBR磁盘签名(Disk Signature) (转帖)的更多相关文章
- (转)GPT磁盘与MBR磁盘区别
		摘要: Windows 2008磁盘管理器中,在磁盘标签处右击鼠标,随磁盘属性的不同会出现“转换到动态磁盘”,“转换到基本磁盘”“转换成GPT磁盘”,“转换成MBR磁盘”等选项,在此做简单介绍.部 ... 
- 使用mbr2gpt将MBR磁盘转换为GPT磁盘
		随着越来越多的新PC的到来,UEFI启动渐渐的取代了BIOS启动方式.不过UEFI需要从GPT磁盘启动,原来的MBR磁盘不行.如果你更换了硬件,只想把磁盘拿到新平台上用又不想重装系统的话就麻烦了.以前 ... 
- 关于磁盘错误disk error
		到同事办公室的时候,机器的启动界面就停在磁盘错误disk error上. 首先怀疑的就是硬盘可能坏了,于是就用u盘启动,运行mhdd检测,一直到10%都没有发现错误.于是退出,重启,发现机器能够启动x ... 
- Mac Electron 应用的签名(signature)和公证(notarization)
		背景 在MacOS 10.15之前,应用如果没有签名,那么首次打开时就会弹出这种“恶意软件”的提示框. 这时只要应用签名了,就不会弹这个框. 但在MacOS 10.14.5之后,应用如果没有公证(简单 ... 
- VMWare虚拟机提示:锁定文件失败,打不开磁盘...模块"Disk"启动失败的解决办法
		我出现该问题的原因: 昨天电脑一下子卡死,于是我就重启了电脑,重启之后我没有打开VMware虚拟机,结果第二天一上班打开VMware就发现出现了“锁定文件失败,打不开磁盘......模块"D ... 
- VMWare虚拟机提示:另一个程序已锁定文件的一部分,打不开磁盘...模块"Disk"启动失败的解决办法
		重启了电脑之后,打开VMware就发现出现了“锁定文件失败,打不开磁盘......模块"Disk"启动失败.”这些文字 为什么会出现这种问题: 这是因为虚拟机在运行的时候,会锁定文 ... 
- 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘
		以 UEFI 启动的 Windows 磁盘必须是 GPT 格式.本文将介绍如何在安装 Windows 期间将磁盘从 MBR 转换成 GPT. 特别注意:操作不慎可能丢失所有数据,如果你懂得安装系统的一 ... 
- 基于weixin-java-mp  做微信JS签名 invalid signature签名错误 官方说明
		微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ... 
- java 签名类 Signature
		java.security类 Signature java.lang.Object java.security.SignatureSpi java.security.Signature public ... 
随机推荐
- 『TensorFlow』读书笔记_AlexNet
			网络结构 创新点 Relu激活函数:效果好于sigmoid,且解决了梯度弥散问题 Dropout层:Alexnet验证了dropout层的效果 重叠的最大池化:此前以平均池化为主,最大池化避免了平均池 ... 
- XSS理解与防御
			一.说明 我说我不理解为什么别人做得出来我做不出来,比如这里要说的XSS我觉得很多人就不了解其定义和原理的,在不了解定义和原理的背景下他们可以拿站,这让人怎么理解呢.那时我最怕两个问题,第一个是题目做 ... 
- javascript中NAN undefined 和null
			null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性. NaN 属性是代表非数字值的特殊值.该属性用于指示某个值不是数字.可以把 Num ... 
- ThinkPHP5的数据操作和Thinkphp3.2.3对比小结
			前言: 由于Thinkphp5和Thinkphp3.2.3的版本差距过大, 在记忆方面容易混淆. 故特意记录一下在数据操作上的对比的不同. Tp3.2.3 增:add(),addAll() 查:fin ... 
- Spring mvc初学
			转自:http://www.cnblogs.com/bigdataZJ/p/springmvc1.html 从今天起,准备好好审视并学习Spring mvc. 虽然从学java的第一个程序——hell ... 
- Python3版本中的filter函数,map函数和reduce函数
			一.filter函数: filter()为已知的序列的每个元素调用给定的布尔函数,调用中,返回值为非零的元素将被添加至一个列表中 def f1(x): if x>20: return True ... 
- flask 自动切换环境
			简介: 我就是个半吊子程序员.在单位写点程序,在家也写点程序. 单位是企业网,不能上互联网,家里也没办法连上企业网,没有VPN. 主武器是我的笔记本电脑.在单位有一台淘汰的linux服务器,家里有个N ... 
- linux 服务发布脚本升级,远程发布,指定拉取远程dev,test等分支代码
			1.本地发布脚本 publish.sh #!/bin/sh currentDay=`date +%Y%m%d` currentTime=`date +%Y%m%d%H%M%S` tomcat1=/da ... 
- [多线程] 线程中的synchronized关键字锁
			为什么要用锁? 在多线程中,难免会出现在多个线程中对同一个对象的实例变量或者全局静态变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实 ... 
- 百度地图JSSDK使用小实例
			代码示例 <html> <head> <meta http-equiv="Content-Type" content="text/html; ... 
