Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就

是“Windows预安装环境”。微软的本意是:WinPE仅用做系统维护,并设置了各种限制。可以简单的理解为:PE是Windows系统的超级精简版、超级权限版(以系统system账户登录)!对于无法进入系统、修复系统、分区、重装系统等问题都可以进入PE进行操作,因此PE是系统维护强大的武器!

微软原版的PE,只有“命令行”即DOS窗口。网上流传的各种版本都是“高手们”修改出来的,甚至有的PE可以作为系统来使用,这都偏离了微软的本意。我不主张“肆意扩展”PE的功能来彰显“技术”,但是“可视化操作界面、常用功能的集成”这些都是必要且必须的,我会在以后的文章中逐一解说。

通常PE启动有两种方式:1.加载到内存 2.直接在某个介质(例如光盘)启动。两种方式各有利弊:加载到内存就会对内存大小要求高;直接在某种介质启动速度就会减慢。但是就如今电脑配置飞速发展的趋势来看,内存大小已经不是限制因素,因此多数是以“加载到内存”的方式启动。

下面简要介绍Windows PE的命名规则:

Windows PE 1.x表示Windows XP内核。(x表示系统版本,例如SP1)

Windows PE 1.5表示Windows 2003内核。(x表示系统版本,例如SP1)

Windows PE 2.x表示Windows Vista内核。(x表示系统版本,例如SP1)

Windows PE 3.x表示Windows 7内核。(x表示系统版本,例如SP1)

Windows PE 4.x表示Windows 8内核。(x表示系统版本,例如SP1)

举例:PE 1.3表示Windows XP SP3内核的PE。

Windows PE 1.x(1.5类似)引导过程(以网上常见的PE为例):

第1步.内核启动:光盘启动后,自动寻找光盘WXPE目录下的SETUPLDR.BIN,并加载它(始引导文件,相当于NT系统的NTLDR),需要同目录下的NTDETECT.COM(同NT系统的同名文件);引导文件中指示了WINNT.SIF(WINNT.XPE)的位置(相当于XP系统BOOT.INI)。

---------------------------------------------------------------------

WINNT.XPE内容如下:

[SetupData]

BootDevice = "ramdisk(0)"

BootPath = "\WXPE\System32\"

OsLoadOptions = "/minint /fastdetect /rdpath=MiniPE\winpe.IM_"

以上内容表示:

1.以“ramdisk方式”加载光盘镜像文件;

2.启动后的系统路径为\WXPE\System32,这里相当于我们平常的\Windows\System32;

3.该配置文件指示了系统镜像(IS_、ISO、IM_或IMA,也就是常说的“内核”)的位置。

----------------------------------------------------------------------

第2步.加载外置程序:外置程序的加载依赖于PECMD.INI(有的存在于WINPE.IS_ 的WXPE\SYSTEM32\目录下;有的在Programs文件夹的某个目录下...),其中形如"LOAD \MiniPE\WinPE.INI"的语句即为加载外置程序的配置文件(WinPE.INI)。这个文件可以在任何可见分区(PE下可见的分区),PECMD在执行时自动搜索所有“可见分区\MiniPE\下的WinPE.INI”,再根据WinPE.INI实现加载外部程序。(例如外置程序在PE.WIM包里面,或者直接存在某个文件夹下,说明:以上目录各个版本PE名称略有不同)。

简单理解:光盘引导文件(例如pe.bif)——SETUPLDR.BIN——WINNT.XPE——启动PE1.x。

--------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------

Windows PE 3.x(2.x类似)引导过程(详见Waik说明文件):

简明过程:光盘启动后自动加载引导文件,将控制权交给Bootmgr,Bootmgr读取Boot\BCD,根据BCD文件的信息读取Sources\Boot.wim文件,进入PE。

详细过程(微软Waik说明文档):

1.加载特定媒体上的启动扇区(MBR)。将控制传递给Bootmgr。Bootmgr从启动配置数据(BCD)中提取基本的启动信息,并将控制权传递给Boot.wim中包含的Winload.exe文件。然后Winload.exe加载相应的硬件抽象层(HAL),并加载系统注册表配置单元和必需的启动驱动程序。完成加载后,将会准备执行内核Ntoskrnl.exe的环境。

2.执行Ntoskrnl.exe,完成环境设置。将控制权传递给会话管理器(SMSS)。

3.SMSS加载注册表的剩余部分,配置运行Win32子系统(Win32k.sys)的环境及其各种进程。SMSS加载用于创建用户会话的Winlogon进程,然后启动服务和剩余的非必要设备驱动程序及安全子系统(LSASS)。

4.Winlogon.exe根据注册表值HKLM\SYSTEM\Setup\CmdLine来运行设置。如果存在%SYSTEMDRIVE%\sources\setup.exe,Winpeshl.exe将启动它,否则Winpeshl.exe将查找在%SYSTEMROOT%\system32\winpeshl.ini中指定的应用程序。如果未指定任何应用程序,则Winpeshl.exe将执行cmd /k %SYSTEMROOT%\system32\startnet.cmd。默认情况下,Windows PE包含一个将启动Wpeinit.exe的Startnet.cmd文件。Wpeinit.exe加载网络资源,并与网络组件(如DHCP)进行协调。

5.Wpeinit.exe完成后,将显示命令提示符窗口。此时,WinPE 3.1的启动过程完成。

简单理解:光盘引导文件(例:pe.bif)——bootmgr——BCD——boot.wim——启动PE3.x。

Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式、启动原理的更多相关文章

  1. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  2. USB入门基础知识(转)

    源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交 ...

  3. Linux入门基础知识

    注:内容系兄弟连Linux教程(百度传课:史上最牛的Linux视频教程)的学习笔记. Linux入门基础知识 1. Unix和Linux发展历史 二者就像父子关系,当然Unix是老爹.1965年,MI ...

  4. React Native 入门基础知识总结

    中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...

  5. 1)Linux程序设计入门--基础知识

    )Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...

  6. 与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦

    原文:与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦 [索引页][源码下载] ...

  7. Windows权限提升基础知识和命令

    介绍 这篇文章是介绍window的权限提升,虽然不是一个全面的指南,但会试图覆盖主要的技术,常用的资源列表在文章底部,可供大家参考. window权限提升基础知识 初始信息收集 在开始提权之前,我们需 ...

  8. CodeMix入门基础知识

    CodeMix在线订购年终抄底促销!火爆开抢>> CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的 ...

  9. 1.windows编程入门MessageBox使用 -windows编程

    引言:刚开始入门windows编程的时候,我记得当时我对MFC的给出的一大堆代码感到束手无策.因为历史的缘故,windows编程入门的代码并没有体现出C++语言的简洁性,相反一上来就给了我们一大堆代码 ...

随机推荐

  1. 自己做的notepad++ FTP同步插件

    平时修改FTP上的文件的时候,想先备份一下,没有合适的方法,尝试做了一个小插件. 差点忘了,下载地址   https://pan.baidu.com/s/1htdtT9E 下面是   具体的说明 Fa ...

  2. oracle学习(一)

    作为一个入门选手,怕忘记,所以所有东西都尽量写下来.(省略oracle11g的安装过程) 一.sqlpuls用sys账户登录 (sqlplus是客户端连上服务器的一个工具) 1.使用cmd控制台登录 ...

  3. 官方新出的 Kotlin 扩赞库 KTX,到底帮你干了什么?

    Kotlin KTX 2月5号的时候,Google 发布了一款 Kotlin 的扩展库,叫 Android KTX,不过现在还处于预览版的状态.它能使 Android 上的 Kotlin 代码更简洁, ...

  4. c#监测电脑状态

    public class DeviceMonitor { static readonly PerformanceCounter cpuCounter = new PerformanceCounter( ...

  5. java web 获取客户端操作系统信息

    package com.java.basic.pattern; import java.util.regex.Matcher; import java.util.regex.Pattern; /** ...

  6. Unable to add window -- token android.os.BinderProxy@3a067204 is not valid错误分析记录

    打开APP时,出现闪退的情况,查看android studio报错信息,主要为: Unable to add window -- token android.os.BinderProxy@3a0672 ...

  7. OpenSSL 中DES-ECB 加密使用注意事项

    参考:http://blog.csdn.net/cparent/article/details/40652051DES加密算法作为一个过时的东西,使用的项目已经很少了.最近在调试与服务器端进行DES加 ...

  8. Maven服务器

    Maven私服仓库管理: Nexus 3.0 使用nexus3.X搭建maven私服在Centos7环境中-详细教程

  9. golang urlencode

    u := url.Values{} u.Set(") u.Set(") u.Set(,"mac":"38:a4:ed:fe:99:c8"}` ...

  10. MySQL创建带有编码的数据库

    mysql> create database chao default character set utf8 collate utf8_general_ci;