原帖: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) (转帖)的更多相关文章

  1. (转)GPT磁盘与MBR磁盘区别

    摘要:   Windows 2008磁盘管理器中,在磁盘标签处右击鼠标,随磁盘属性的不同会出现“转换到动态磁盘”,“转换到基本磁盘”“转换成GPT磁盘”,“转换成MBR磁盘”等选项,在此做简单介绍.部 ...

  2. 使用mbr2gpt将MBR磁盘转换为GPT磁盘

    随着越来越多的新PC的到来,UEFI启动渐渐的取代了BIOS启动方式.不过UEFI需要从GPT磁盘启动,原来的MBR磁盘不行.如果你更换了硬件,只想把磁盘拿到新平台上用又不想重装系统的话就麻烦了.以前 ...

  3. 关于磁盘错误disk error

    到同事办公室的时候,机器的启动界面就停在磁盘错误disk error上. 首先怀疑的就是硬盘可能坏了,于是就用u盘启动,运行mhdd检测,一直到10%都没有发现错误.于是退出,重启,发现机器能够启动x ...

  4. Mac Electron 应用的签名(signature)和公证(notarization)

    背景 在MacOS 10.15之前,应用如果没有签名,那么首次打开时就会弹出这种“恶意软件”的提示框. 这时只要应用签名了,就不会弹这个框. 但在MacOS 10.14.5之后,应用如果没有公证(简单 ...

  5. VMWare虚拟机提示:锁定文件失败,打不开磁盘...模块"Disk"启动失败的解决办法

    我出现该问题的原因: 昨天电脑一下子卡死,于是我就重启了电脑,重启之后我没有打开VMware虚拟机,结果第二天一上班打开VMware就发现出现了“锁定文件失败,打不开磁盘......模块"D ...

  6. VMWare虚拟机提示:另一个程序已锁定文件的一部分,打不开磁盘...模块"Disk"启动失败的解决办法

    重启了电脑之后,打开VMware就发现出现了“锁定文件失败,打不开磁盘......模块"Disk"启动失败.”这些文字 为什么会出现这种问题: 这是因为虚拟机在运行的时候,会锁定文 ...

  7. 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘

    以 UEFI 启动的 Windows 磁盘必须是 GPT 格式.本文将介绍如何在安装 Windows 期间将磁盘从 MBR 转换成 GPT. 特别注意:操作不慎可能丢失所有数据,如果你懂得安装系统的一 ...

  8. 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明

    微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...

  9. java 签名类 Signature

    java.security类 Signature java.lang.Object java.security.SignatureSpi java.security.Signature public ...

随机推荐

  1. Flask之项目创建,路由以及会话控制

    Flask Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎 ...

  2. Typescript中的装饰器原理

    Typescript中的装饰器原理 1.小原理 因为react中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...

  3. day41-python多进程多线程-多线程共享

    线程共享变量多线程和多进程不同之处在于多线程本身就是可以和父进程共享内存的,这也是为什么其中一个线程挂掉以后,为什么其他线程也会死掉的道理. import threading def worker() ...

  4. GDT全局描述符表

    GDT全局描述符表 什么是GDT全局描述符表 GDT全称为Global Descriptor Table,全局描述符表. 保护模式的寻址方式不在使用寄存器分段的方式直接寻址方式了.而采用的是使用GDT ...

  5. 修改C#mvc的默认首页

    找到Global.asax,在其中RouteConfig.RegisterRoutes(RouteTable.Routes);这条方法上,右键转到定义,在defaults: new { control ...

  6. ubuntu14.04, Cloudera Manager 5.11.1, cdh5.11.1 postgresql离线部署

    最近一段时间团队接到的项目需要处理的数据量非常大,之前的处理方式难以满足现有需求.最近两周前前后后折腾了不少,在搭建了hadoop+hbase+hive+spark的一个集群后,由于感觉管理和监控太麻 ...

  7. 18-09-19 关于outlook的使用

  8. 一、fopen与fclose

    需要包含的头文件为stdio.h fopen 原型:FILE *fopen(const char *path, const char *mode); 返回:打开成功则返回文件流指针,失败则返回空 参数 ...

  9. C++ File Binary

    论操作非文本文件时,std::ios::binary的重要性 今天在读取图片文件的时候,根据图片数据的高宽对图片数据进行读取,但是出现了图片数据读取不完整,但是文件已经到达末尾的情况,中间想过read ...

  10. CSS 实现单、多行文本溢出显示省略号(…)

    如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...