在上篇文章中关于winload.exe数字签名无法验证导致无法正常开机问题,现在再做个深入的分析。

部分遇到相似问题的朋友在使用将原系统C:\Windows\System32\Boot目录下的winload.exe文件拷贝到C:\Windows\System32目录下替换错误的winload.exe的方法之后重启电脑发现问题依旧,自然就认为这是个坑人的办法。其实事实并非如此,下面就来详细分析下这个问题。

在搞清楚这个问题之前先要了解一下win7的启动过程:电脑加电后,首先它会启动主板上的BIOS,BIOS默认对电脑的硬件进行自检,完成自检之后BIOS会搜索硬盘上的MBR,如果MBR正常,那么MBR就会读取硬盘上的DPT,也叫分区表,DPT里记录了硬盘的分区表信息,MBR会在这些分区里搜索活动分区,并且读取活动分区里的主引导记录PBR,如果一切正常就把控制权给PBR。在取得控制权后PBR会寻找活动分区根目录下的bootmgr文件,这个文件是win7的启动管理器,bootmgr接管后会读取活动分区根目录下Boot文件夹下的BCD文件,这个文件存储了win7的启动配置数据,Boot文件夹还包含相应语言的文件夹,对应语言文件夹下存在BOOTMGR.EXE.MUI文件。bootmgr读取BCD并调用BOOTMGR.EXE.MUI最终为我们呈现启动菜单界面。当然因为很多人默认直接进入Windows所以就看不到启动菜单。完成这一步骤后,bootmgr会按照在BCD文件中设置的系统所在分区加载该分区Windows\System32\winload.exe程序,就是说winload.exe的运行环境是bootmgr。winload.exe取得控制权后加载内核,硬件和其他服务,然后进入桌面至此完成启动。

上面的文字叙述可能比较繁琐,整个启动过程简单来说就是:BIOS--MBR--DPT--PBR--bootmgr--BCD--启动菜单---winload.exe(如果选择的是win7)--内核加载等 --启动整个windows7系统。

启动过程搞清楚了就能清楚地定位问题,既然winload.exe无法验证签名,它又运行在bootmgr下而且BCD文件是配置文件,那我们就得到解决问题的第一个方法,禁止验证winload.exe的签名就可以了,那又怎么禁止呢?前面说到的BCD配置文件是控制权从bootmgr到winload.exe的关键文件,显然我们要去找它。先进入WinPE里面(如果不知道什么是PE和怎么进PE就百度吧),然后到原来系统盘根目录下的Boot文件夹里就可以看到BCD文件了,操作之前先备份一下BCD文件,在PE里找到BOOTICE程序,这是BCD编辑工具,打开它你会看到这样的界面:

选择BCD编辑后选择其他BCD文件,然后到系统盘Boot目录下找到BCD文件,最好用智能编辑模式打开BCD文件,然后可以看到这样的界面:

这里可以看到在左下方有禁用数字签名验证的选项,这里为了演示我已经禁用了数字签名验证。到这里就算是数字签名无效的winload.exe也可以启动系统了。到这里也可以看出很多使用ghost系统的用户因为关闭了更新而BCD中又没有禁用驱动签名验证从而导致winload.exe数字签名失效而无法验证,使系统无法启动。

上面的方法是禁用数字签名,当然也可以选择使用有效签名的winload.exe文件替换签名无效的winload.exe文件。

相信到这里关于文首疑问的答案应该很清楚了。显然很多用户C:\Windows\System32\Boot目录下的winload.exe文件的签名也是无效的,或者说你的winload.exe文件的数字签名本身是无效的,你又是用的ghost系统,开始时系统BCD是禁止数字签名验证的,在修改过BCD之后或BCD损坏之后,系统开始验证winload.exe的数字签名,验证失败导致系统无法加载。可以看下我的winload.exe:

我现在使用的winload.exe的签名无效但是我禁止数字签名验证一样可以正常进入系统。当然我的C:\Windows\System32\Boot目录下的winload.exe文件的数字签名是有效的。所以替换之后可以成功进入系统。所以说不是替换文件的方法无用,而是很多人只是机械的按别人的方法操作而不看问题的根源。

到这里问题已经基本说清楚也解决了。最后说一下两种方法的优缺点吧,当然两种方法都需要PE,所以说PE是个好东西。禁用数字签名验证只需要修改BCD即可,很方便。但是禁用数字签名验证会带来一定的安全问题。替换文件就需要找到数字签名有效的winload.exe文件,是的一定要有效才行,网上下载的很多都是无效的,所以导致很多人到坑里去了,这个麻烦一点但不需要牺牲安全。

虽然网上有很多解决这个问题的办法,但很多都只说了个方法而没有具体解决问题的思路。其实只要理清思路,问题的解决办法自然会有啦,很多系统无法成功启动的问题只要顺着win7启动过程去看就能找到解决的方法。

winload.exe数字签名问题详解相关推荐

  1. windows数字签名与详解信息替换

    文章目录 1.前言 2. 数字签名修改方式 2.1 自己给程序加签名 2.2 盗取他程序的签名给自己的程序使用 3.修改详细信息与编译时候修改程序图标 参考文章 1.前言 数字签名: 详解信息: 2. ...

  2. java写exe程序实例,java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写java代码,将编写好的java项目导出一个.jar格 ...

  3. java.exe 安装程序_java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格 ...

  4. Junction.exe 命令应用详解及下载

    http://technet.microsoft.com/en-us/Sysinternals/Bb896768.aspx 下载Junction NTFS 新特性:Junction 应用详解 前些时无 ...

  5. Junction.exe 命令应用详解

    转载地址:http://blog.csdn.net/chwxj/article/details/5939921 NTFS 新特性:Junction 应用详解 前些时无意发现 Vista 的 C:/Do ...

  6. cmd.exe启动参数详解

    启动命令解释程序 Cmd.exe 的新范例.如果在不含参数的情况下使用,cmd 将显示操作系统的版本和版权信息. 语法 cmd [{/c | /k}] [/s] [/q] [/d] [{/a | /u ...

  7. python3.6打包成exe文件_详解如何将python3.6软件的py文件打包成exe程序

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. RunDll32.exe 详解及[Windows批处理]清除IE缓存

    Rundll32命令详解 文件作用:执行32位DLL文件中的内部函数 位置:X:(当前系统分区)\windows\system32 命令语法: Rundll32.exe DLLname,Functio ...

  9. smss.exe是什么进程?详解Windows会话管理器中的smss.exe

    smss.exe是什么进程?详解Windows会话管理器中的smss.exe 进程综述 smss.exe是什么进程?详解Windows会话管理器中的smss.exe-冯金伟博客园smss.exe是什么 ...

  10. Python 将.py转换为.exe详解

    本文是由@熊猫大哥大的博客修改而来(所以就不能说是"原创"了) 原博客链接:Python学习笔记(15)-Python代码转换为exe可执行程序详解(下面会提到本文与其的一点不同) ...

最新文章

  1. 会php学node要多久,php开发需要会node吗
  2. vuex-along解决vuex中存储的数据在页面刷新之后失去的问题
  3. PHPCMS v9设置文章的审核功能
  4. Asp.Net Core Ocelot Consul 微服务
  5. 十进制数与八进制数互相转换(MATLAB和C版本)
  6. 机器学习岗位太少_太多的东西要学习,很少的时间
  7. Web前端学习笔记:Bootstrap
  8. Dart 7-Day
  9. 关于计算机工作的诗歌,提高计算机工作及上网效率的方法
  10. 铁乐学python_day29_模块与包学习4
  11. OpenCV_轮廓例子
  12. etcd upgrade
  13. 启动vpn报网络扩展错误(问题篇)
  14. C#中Panel控件的使用
  15. 微信小程序开发|起步-工欲善其事必先利其器
  16. IDEA 设置单行注释格式化时不换行
  17. 011 数据恢复(原理)
  18. ubuntu20.04lts初体验
  19. Python爬虫 图片爬取简陋版
  20. 面试资料整理(整理中~)

热门文章

  1. EditPlus 3 网页中文乱码问题
  2. Python翻译Excel文件
  3. pb利用pdf虚拟打印机将datawindow中的内容导出为pdf
  4. HP Loadrunner 11下载地址
  5. nodejs koa2 mysql_springboot动态加载sigar - SegmentFault 思否
  6. ci mysql空闲连接回收_数据库连接空闲回收问题 CommunicationsException: Communications link failure...
  7. 哈理工oj1003 Tiles of Tetris, NOT!
  8. ajaxSubmit问题求解
  9. python拟合曲线求方程_matplotlib中对数曲线拟合及lin方程的求解
  10. 递归算法经典实例小结(C#实现)