当前位置:文档之家› PE教程

PE教程

PE教程
PE教程

PE文件格式一览

考虑到早期写的PE教程1是自己所有教程中最糟糕的一篇,此番决心彻底重写一篇以飨读者。

PE 的意思就是Portable Executable(可移植的执行体)。它是Win32环境自身所带的执行体文件格式。它的一些特性继承自Unix的Coff (common object file format)文件格式。"portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的: 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。当然,移植到不同的CPU上PE执行体必然得有一些改变。所有win32执行体(除了VxD和16位的Dll)都使用PE文件格式,包括NT的内核模式驱动程序(kernel mode drivers)。因而研究PE文件格式给了我们洞悉Windows结构的良机。

本教程就让我们浏览一下PE文件格式的概要。

DOS MZ header

DOS stub

PE header

Section table

Section 1

Section 2

Section ...

Section n

上是PE文件结构的总体层次分布。所有PE文件(甚至32位的DLLs) 必须以一个简单的DOS MZ header 开始。我们通常对此结构没有太大兴趣。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随MZ header 之后的DOS stub。DOS stub实际上是个有效的EXE,在不支持PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串"This program requires Windows" 或者程序员可根据自己的意图实现完整的DOS代码。通常我们也不对DOS stub 太感兴趣: 因为大多数情况下它是由汇编器/编译器自动生成。通常,它简单调用中断21h服务9来显示字符串"This pro gram cannot run in DOS mode"。

紧接着DOS stub 的是PE header。PE header 是PE相关结构IMAGE_NT_HEADE RS 的简称,其中包含了许多PE装载器用到的重要域。当我们更加深入研究PE文件格式后,将对这些重要域耳目能详。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从DOS MZ header 中找到PE header 的起始偏移量。因而跳过了DOS stub 直

接定位到真正的文件头PE header。

PE文件的真正内容划分成块,称之为sections(节)。每节是一块拥有共同属性的数据,比如代码/数据、读/写等。我们可以把PE文件想象成一逻辑磁盘,PE header 是磁盘的b oot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。值得我们注意的是---- 节的划分是基于各组数据的共同属性: 而不是逻辑概念。重要的不是数据/代码是如何使用的,如果PE文件中的数据/代码拥有相同属性,它们就能被归入同一节中。不必关心节中类似于"data", "code"或其他的逻辑概念: 如果数据和代码拥有相同属性,它们就可以被归入同一个节中。(译者注:节名称仅仅是个区别不同节的符号而已,类似"data", "code"的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当PE装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。

如果我们将PE文件格式视为一逻辑磁盘,PE header是boot扇区而sections是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是PE文件格式中等价于目录的东东?别急,那就是PE header 接下来的数组结构section table(节表)。每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果PE文件里有5个节,那么此结构数组内就有5个成员。因此,我们便可以把节表视为逻辑磁盘中的根目录,每个数组成员等价于根目录中目录项。

以上就是PE文件格式的物理分布,下面将总结一下装载一PE文件的主要步骤:

1. 当PE文件被执行,PE装载器检查DOS MZ header 里的PE header 偏移量。如果找到,则跳转到PE header。

2. PE装载器检查PE header 的有效性。如果有效,就跳转到PE header的尾部。

3. 紧跟PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。

4. PE文件映射入内存后,PE装载器将处理PE文件中类似import table(引入表)逻辑部分。

上述步骤是基于本人观察后的简述,显然还有一些不够精确的地方,但基本明晰了执行体被处理的过程。

你应该下载LUEVELSMEYER的《PE文件格式》。该文的描述相当详细,可用作案头的参考手册。

检验PE文件的有效性

本教程中我们将学习如何检测给定文件是一有效PE文件。

下载范例

理论:

如何才能校验指定文件是否为一有效PE文件呢? 这个问题很难回答,完全取决于想要的精准程度。您可以检验PE文件格式里的各个数据结构,或者仅校验一些关键数据结构。大多数情况下,没有必要校验文件里的每一个数据结构,只要一些关键数据结构有效,我们就认为是有效的PE文件了。下面我们就来实现前面的假设。

我们要验证的重要数据结构就是PE header。从编程角度看,PE header 实际就是一个IMAGE_NT_HEADERS 结构。定义如下:

IMAGE_NT_HEADERS STRUCT

Signature dd ?

FileHeader IMAGE_FILE_HEADER <>

OptionalHeader IMAGE_OPTIONAL_HEADER32 <>

IMAGE_NT_HEADERS ENDS

Signature 一dword类型,值为50h, 45h, 00h, 00h(PE\0\0)。本域为PE标记,我们可以此识别给定文件是否为有效PE文件。

FileHeader 该结构域包含了关于PE文件物理分布的信息,比如节数目、文件执行机器等。OptionalHeader 该结构域包含了关于PE文件逻辑分布的信息,虽然域名有"可选"字样,但实际上本结构总是存在的。

我们目的很明确。如果IMAGE_NT_HEADERS的signature域值等于"PE\0\0",那么就是有效的PE文件。实际上,为了比较方便,Microsoft已定义了常量IMAGE_NT_SIGNATURE 供我们使用。

IMAGE_DOS_SIGNA TURE equ 5A4Dh

IMAGE_OS2_SIGNA TURE equ 454Eh

IMAGE_OS2_SIGNA TURE_LE equ 454Ch

IMAGE_VXD_SIGNA TURE equ 454Ch

IMAGE_NT_SIGNA TURE equ 4550h

接下来的问题是: 如何定位PE header? 答案很简单: DOS MZ header 已经包含了指向PE header 的文件偏移量。DOS MZ header 又定义成结构IMAGE_DOS_HEADER 。查询windows.inc,我们知道IMAGE_DOS_HEADER 结构的e_lfanew成员就是指向PE header 的文件偏移量。

现在将所有步骤总结如下:

1. 首先检验文件头部第一个字的值是否等于IMAGE_DOS_SIGNATURE,是则DOS MZ header 有效。

2. 一旦证明文件的DOS header 有效后,就可用e_lfanew来定位PE header 了。

3. 比较PE header 的第一个字的值是否等于IMAGE_NT_HEADER。如果前后两个值都匹配,那我们就认为该文件是一个有效的PE文件。

Example:

.386

.model flat,stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\comdlg32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\comdlg32.lib

SEH struct

PrevLink dd ? ; the address of the previous seh structure

CurrentHandler dd ? ; the address of the exception handler

SafeOffset dd ? ; The offset where it's safe to continue execution

PrevEsp dd ? ; the old value in esp

PrevEbp dd ? ; The old value in ebp

SEH ends

.data

AppName db "PE tutorial no.2",0

ofn OPENFILENAME <>

FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0

db "All Files",0,"*.*",0,0

FileOpenError db "Cannot open the file for reading",0

FileOpenMappingError db "Cannot open the file for memory mapping",0

FileMappingError db "Cannot map the file into memory",0

FileValidPE db "This file is a valid PE",0

FileInValidPE db "This file is not a valid PE",0

.data?

buffer db 512 dup(?)

hFile dd ?

hMapping dd ?

pMapping dd ?

ValidPE dd ?

.code

start proc

LOCAL seh:SEH

mov ofn.lStructSize,SIZEOF ofn

mov ofn.lpstrFilter, OFFSET FilterString

mov ofn.lpstrFile, OFFSET buffer

mov ofn.nMaxFile,512

mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONL Y

invoke GetOpenFileName, ADDR ofn

.if eax==TRUE

invoke CreateFile, addr buffer, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL

.if eax!=INVALID_HANDLE_V ALUE

mov hFile, eax

invoke CreateFileMapping, hFile, NULL, PAGE_READONL Y,0,0,0

.if eax!=NULL

mov hMapping, eax

invoke MapViewOfFile,hMapping,FILE_MAP_READ,0,0,0

.if eax!=NULL

mov pMapping,eax

assume fs:nothing

push fs:[0]

pop seh.PrevLink

mov seh.CurrentHandler,offset SEHHandler

mov seh.SafeOffset,offset FinalExit

lea eax,seh

mov fs:[0], eax

mov seh.PrevEsp,esp

mov seh.PrevEbp,ebp

mov edi, pMapping

assume edi:ptr IMAGE_DOS_HEADER

.if [edi].e_magic==IMAGE_DOS_SIGNATURE

add edi, [edi].e_lfanew

assume edi:ptr IMAGE_NT_HEADERS

.if [edi].Signature==IMAGE_NT_SIGNATURE

mov ValidPE, TRUE

.else

mov ValidPE, FALSE

.endif

.else

mov ValidPE,FALSE

.endif

FinalExit:

.if ValidPE==TRUE

invoke MessageBox, 0, addr FileValidPE, addr AppName, MB_OK+MB_ICONINFORMATION

.else

invoke MessageBox, 0, addr FileInValidPE, addr AppName, MB_OK+MB_ICONINFORMATION

.endif

push seh.PrevLink

pop fs:[0]

invoke UnmapViewOfFile, pMapping

.else

invoke MessageBox, 0, addr FileMappingError, addr AppName, MB_OK+MB_ICONERROR

.endif

invoke CloseHandle,hMapping

.else

invoke MessageBox, 0, addr FileOpenMappingError, addr AppName, MB_OK+MB_ICONERROR

.endif

invoke CloseHandle, hFile

.else

invoke MessageBox, 0, addr FileOpenError, addr AppName, MB_OK+MB_ICONERROR

.endif

.endif

invoke ExitProcess, 0

start endp

SEHHandler proc uses edx pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD

mov edx,pFrame

assume edx:ptr SEH

mov eax,pContext

assume eax:ptr CONTEXT

push [edx].SafeOffset

pop [eax].regEip

push [edx].PrevEsp

pop [eax].regEsp

push [edx].PrevEbp

pop [eax].regEbp

mov ValidPE, FALSE

mov eax,ExceptionContinueExecution

ret

SEHHandler endp

end start

分析:

本例程打开一文件,先检验DOS header是否有效,有效就接着检验PE header的有效性,ok 就认为是有效的PE文件了。这里,我们还运用了结构异常处理(SEH),这样就不必检查每个可能的错误: 如果有错误出现,就认为PE检测失效所致,于是给出我们的报错信息。其实Windows内部普遍使用SEH来检验参数传递的有效性。若对SEH感兴趣的话,可阅读Jeremy Gordon的文章。

程序调用打开文件通用对话框,用户选定执行文件后,程序便打开文件并映射到内存。并在有效性检验前建立一SEH:

assume fs:nothing

push fs:[0]

pop seh.PrevLink

mov seh.CurrentHandler,offset SEHHandler

mov seh.SafeOffset,offset FinalExit

lea eax,seh

mov fs:[0], eax

mov seh.PrevEsp,esp

mov seh.PrevEbp,ebp

一开始就假设寄存器fs为空(assume fs:nothing)。记住这一步不能省却,因为MASM 假设fs寄存器为ERROR。接下来保存Windows使用的旧SEH处理函数地址到我们自己定义的结构中,同时保存我们的SEH处理函数地址和异常处理时的执行恢复地址,这样一旦错误发生就能由异常处理函数安全地恢复执行了。同时还保存当前esp及ebp的值,以便我们的SEH处理函数将堆栈恢复到正常状态。

mov edi, pMapping

assume edi:ptr IMAGE_DOS_HEADER

.if [edi].e_magic==IMAGE_DOS_SIGNATURE

成功建立SEH后继续校验工作。置目标文件的首字节地址给edi,使其指向DOS header 的首字节。为便于比较,我们告诉编译器可以假定edi正指向IMAGE_DOS_HEADER结构(事实亦是如此)。然后比较DOS header的首字是否等于字符串"MZ",这里利用了windows.inc中定义的IMAGE_DOS_SIGNATURE常量。若比较成功,继续转到PE header,否则设ValidPE 值为FALSE,意味着文件不是有效PE文件。

add edi, [edi].e_lfanew

assume edi:ptr IMAGE_NT_HEADERS

.if [edi].Signature==IMAGE_NT_SIGNATURE

mov ValidPE, TRUE

.else

mov ValidPE, FALSE

.endif

要定位到PE header,需要读取DOS header中的e_lfanew域值。该域含有PE header在文件中相对文件首部的偏移量。edi加上该值正好定位到PE header的首字节。这儿可能会出错,如果文件不是PE文件,e_lfanew值就不正确,加上该值作为指针就可能导致异常。若不用SEH,我们必须校验e_lfanew值是否超出文件尺寸,这不是一个好办法。如果一切OK,我们就比较PE header的首字是否是字符串"PE"。这里在此用到了常量IMAGE_NT_SIGNATURE,相等则认为是有效的PE文件。

如果e_lfanew的值不正确导致异常,我们的SEH处理函数就得到执行控制权,简单恢复堆栈指针和基栈指针后,就根据safeoffset的值恢复执行到FinalExit标签处。

FinalExit:

.if ValidPE==TRUE

invoke MessageBox, 0, addr FileValidPE, addr AppName, MB_OK+MB_ICONINFORMATION

.else

invoke MessageBox, 0, addr FileInValidPE, addr AppName, MB_OK+MB_ICONINFORMATION

.endif

上述代码简单明确,根据ValidPE的值显示相应信息。

push seh.PrevLink

pop fs:[0]

一旦SEH不再使用,必须从SEH链上断开。

File Head er (文件头)

本课我们将要研究PE header 的file header(文件头)部分。

至此,我们已经学到了哪些东东,先简要回顾一下:

DOS MZ header 又命名为IMAGE_DOS_HEADER.。其中只有两个域比较重要: e_magic 包含字符串"MZ",e_lfanew 包含PE header在文件中的偏移量。

比较e_magic 是否为IMAGE_DOS_SIGNATURE以验证是否是有效的DOS header。比对符合则认为文件拥有一个有效的DOS header。

为了定位PE header,移动文件指针到e_lfanew所指向的偏移。

PE header的第一个双字包含字符串"PE\0\0"。该双字与IMAGE_NT_SIGNATURE比对,符合则认为PE header有效。

本课我们继续探讨关于PE header 的知识。PE header 的正式命名是IMAGE_NT_HEADERS。再来回忆一下这个结构。

IMAGE_NT_HEADERS STRUCT

Signature dd ?

FileHeader IMAGE_FILE_HEADER <>

OptionalHeader IMAGE_OPTIONAL_HEADER32 <>

IMAGE_NT_HEADERS ENDS

Signature PE标记,值为50h, 45h, 00h, 00h(PE\0\0)。

FileHeader 该结构域包含了关于PE文件物理分布的一般信息。

OptionalHeader 该结构域包含了关于PE文件逻辑分布的信息。

最有趣的东东在OptionalHeader 里。不过,FileHeader 里的一些域也很重要。本课我们将学习FileHeader,下一课研究OptionalHeader。

IMAGE_FILE_HEADER STRUCT

Machine WORD ?

NumberOfSections WORD ?

TimeDateStamp dd ?

PointerToSymbolTable dd ?

NumberOfSymbols dd ?

SizeOfOptionalHeader WORD ?

Characteristics WORD ?

IMAGE_FILE_HEADER ENDS

Field name Meanings

Machine 该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch)。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。看起来,除了禁止程序执行之外,本域对我们来说用处不大。NumberOfSections 文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这

个值。

TimeDateStamp 文件创建日期和时间。我们不感兴趣。

PointerToSymbolTable 用于调试。

NumberOfSymbols 用于调试。

SizeOfOptionalHeader 指示紧随本结构之后的OptionalHeader 结构大小,必须为有效值。Characteristics 关于文件信息的标记,比如文件是exe还是dll。

简言之,只有三个域对我们有一些用: Machine, NumberOfSections 和Characteristics。通常不会改变Machine 和Characteristics 的值,但如果要遍历节表就得使用NumberOfSections。

为了更好阐述NumberOfSections 的用处,这里简要介绍一下节表。

节表是一个结构数组,每个结构包含一个节的信息。因此若有3个节,数组就有3个成员。我们需要NumberOfSections值来了解该数组中到底有几个成员。也许您会想检测结构中的全0成员起到同样效果。Windows确实采用了这种方法。为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。为什么我们不能忽略NumberOfSections的值? 有几个原因。PE说明中没有指定节表必须以全0结构结束。Thus there may be a situation where the last array member is contiguous to the first section, without empty space at all. Another reason has to do with bound imports. The new-style binding puts the information immediately following the section table's last structure array member. 因此您仍然需要NumberOfSections。

Optional Head er

我们已经学习了关于DOS header 和PE header 中部分成员的知识。这里是PE header 中最后、最大或许也是最重要的成员,optional header。

回顾一下,optional header 结构是IMAGE_NT_HEADERS 中的最后成员。包含了PE文件的逻辑分布信息。该结构共有31个域,一些是很关键,另一些不太常用。这里只介绍那些真正有用的域。

这儿有个关于PE文件格式的常用术语: RVA

RVA 代表相对虚拟地址。知道什么是虚拟地址吗?相对那些简单的概念而言,RVA有些晦涩。简言之,RVA是虚拟空间中到参考点的一段距离。我打赌您肯定熟悉文件偏移量: RVA 就是类似文件偏移量的东西。当然它是相对虚拟空间里的一个地址,而不是文件头部。举例说明,如果PE文件装入虚拟地址(VA)空间的400000h处,且进程从虚址401000h开始执行,我们可以说进程执行起始地址在RVA 1000h。每个RVA都是相对于模块的起始VA的。为什么PE文件格式要用到RVA呢? 这是为了减少PE装载器的负担。因为每个模块多有可能被重载到任何虚拟地址空间,如果让PE装载器修正每个重定位项,这肯定是个梦魇。相反,如果所有重定位项都使用RVA,那么PE装载器就不必操心那些东西了: 它只要将整个模块重定位到新的起始VA。这就象相对路径和绝对路径的概念: RVA类似相对路径,VA 就象绝对路径。

Field Meanings

AddressOfEntryPoint PE装载器准备运行的PE文件的第一个指令的RVA。若您要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。imageBase PE文件的优先装载地址。比如,如果该值是400000h,PE装载器将尝试把文件装到虚拟地址空间的400000h处。字眼"优先"表示若该地址区域已被其他模块占用,那PE装载器会选用其他空闲地址。

SectionAlignment 内存中节对齐的粒度。例如,如果该值是4096 (1000h),那么每节的起始地址必须是4096的倍数。若第一节从401000h开始且大小是10个字节,则下一节必定从402000h开始,即使401000h和402000h之间还有很多空间没被使用。FileAlignment 文件中节对齐的粒度。例如,如果该值是(200h),,那么每节的起始地址必须是512的倍数。若第一节从文件偏移量200h开始且大小是10个字节,则下一节必定位于偏移量400h: 即使偏移量512和1024之间还有很多空间没被使用/定义。

MajorSubsystemVersion

MinorSubsystemVersion win32子系统版本。若PE文件是专门为Win32设计的,该子系统版本必定是4.0否则对话框不会有3维立体感。

SizeOfimage 内存中整个PE映像体的尺寸。它是所有头和节经过节对齐处理后的大小。SizeOfHeaders 所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸。可以以此值作为PE文件第一节的文件偏移量。

Subsystem NT用来识别PE文件属于哪个子系统。对于大多数Win32程序,只有两类值: Windows GUI 和Windows CUI (控制台)。

DataDirectory 一IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等。

Section Table(节表)

理论:

到本课为止,我们已经学了许多关于DOS header 和PE header 的知识。接下来就该轮到section table(节表)了。节表其实就是紧挨着PE header 的一结构数组。该数组成员的数目由file header (IMAGE_FILE_HEADER) 结构中NumberOfSections 域的域值来决定。节表结构又命名为IMAGE_SECTION_HEADER。

IMAGE_SIZEOF_SHORT_NAME equ 8

IMAGE_SECTION_HEADER STRUCT

Name1 db IMAGE_SIZEOF_SHORT_NAME dup(?)

union Misc

PhysicalAddress dd ?

VirtualSize dd ?

ends

VirtualAddress dd ?

SizeOfRawData dd ?

PointerToRawData dd ?

PointerToRelocations dd ?

PointerToLinenumbers dd ? 哦

NumberOfRelocations dw ?

NumberOfLinenumbers dw ?

Characteristics dd ?

IMAGE_SECTION_HEADER ENDS

同样,不是所有成员都是很有用的,我们只关心那些真正重要的。

Field Meanings

Name1 事实上本域的名称是"name",只是"name"已被MASM用作关键字,所以我们只能用"Name1"代替。这儿的节名长不超过8字节。记住节名仅仅是个标记而已,我们选择任何名字甚至空着也行,注意这里不用null结束。命名不是一个ASCIIZ字符串,所以不用null 结尾。

VirtualAddress 本节的RVA(相对虚拟地址)。PE装载器将节映射至内存时会读取本值,因此如果域值是1000h,而PE文件装在地址400000h处,那么本节就被载到401000h。SizeOfRawData 经过文件对齐处理后节尺寸,PE装载器提取本域值了解需映射入内存的节字节数。(译者注: 假设一个文件的文件对齐尺寸是0x200,如果前面的VirtualSize域指示本节长度是0x388字节,则本域值为0x400,表示本节是0x400字节长)。PointerToRawData 这是节基于文件的偏移量,PE装载器通过本域值找到节数据在文件中的位置。

Characteristics 包含标记以指示节属性,比如节是否含有可执行代码、初始化数据、未初始数据,是否可写、可读等。

现在我们已知晓IMAGE_SECTION_HEADER 结构,再来模拟一下PE装载器的工作吧:

读取IMAGE_FILE_HEADER 的NumberOfSections域,知道文件的节数目。

SizeOfHeaders 域值作为节表的文件偏移量,并以此定位节表。

遍历整个结构数组检查各成员值。

对于每个结构,我们读取PointerToRawData域值并定位到该文件偏移量。然后再读取Siz eOfRawData域值来决定映射内存的字节数。将VirtualAddress域值加上imageBase域值等于节起始的虚拟地址。然后就准备把节映射进内存,并根据Characteristics域值设置属性。

遍历整个数组,直至所有节都已处理完毕。

注意我们并没有使用节名: 这其实并不重要。

示例:

本例程打开一PE文件遍历其节表,并在列表框控件显示各节的信息。

.386

.model flat,stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\comdlg32.inc

include \masm32\include\user32.inc

include \masm32\include\comctl32.inc

includelib \masm32\lib\comctl32.lib

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\comdlg32.lib

IDD_SECTIONTABLE equ 104

IDC_SECTIONLIST equ 1001

SEH struct

PrevLink dd ? ; the address of the previous seh structure

CurrentHandler dd ? ; the address of the new exception handler SafeOffset dd ? ; The offset where it's safe to continue execution PrevEsp dd ? ; the old value in esp

PrevEbp dd ? ; The old value in ebp

SEH ends

.data

AppName db "PE tutorial no.5",0

ofn OPENFILENAME <>

FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0

db "All Files",0,"*.*",0,0

FileOpenError db "Cannot open the file for reading",0 FileOpenMappingError db "Cannot open the file for memory mapping",0 FileMappingError db "Cannot map the file into memory",0 FileInValidPE db "This file is not a valid PE",0

template db "%08lx",0

SectionName db "Section",0

VirtualSize db "V.Size",0

VirtualAddress db "V.Address",0

SizeOfRawData db "Raw Size",0

RawOffset db "Raw Offset",0

Characteristics db "Characteristics",0

.data?

hInstance dd ?

buffer db 512 dup(?)

hFile dd ?

hMapping dd ?

pMapping dd ?

ValidPE dd ?

NumberOfSections dd ?

.code

start proc

LOCAL seh:SEH

invoke GetModuleHandle,NULL

mov hInstance,eax

mov ofn.lStructSize,SIZEOF ofn

mov ofn.lpstrFilter, OFFSET FilterString

mov ofn.lpstrFile, OFFSET buffer

mov ofn.nMaxFile,512

mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONG NAMES or OFN_EXPLORER or OFN_HIDEREADONLY

invoke GetOpenFileName, ADDR ofn

.if eax==TRUE

invoke CreateFile, addr buffer, GENERIC_READ, FILE_SHARE_READ, NULL, O PEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL

.if eax!=INVALID_HANDLE_VALUE

mov hFile, eax

invoke CreateFileMapping, hFile, NULL, PAGE_READONLY,0,0,0

.if eax!=NULL

mov hMapping, eax

invoke MapViewOfFile,hMapping,FILE_MAP_READ,0,0,0

.if eax!=NULL

mov pMapping,eax

assume fs:nothing

push fs:[0]

pop seh.PrevLink

mov seh.CurrentHandler,offset SEHHandler

mov seh.SafeOffset,offset FinalExit

lea eax,seh

mov fs:[0], eax

mov seh.PrevEsp,esp

mov seh.PrevEbp,ebp

mov edi, pMapping

assume edi:ptr IMAGE_DOS_HEADER

.if [edi].e_magic==IMAGE_DOS_SIGNATURE

add edi, [edi].e_lfanew

assume edi:ptr IMAGE_NT_HEADERS

.if [edi].Signature==IMAGE_NT_SIGNATURE

mov ValidPE, TRUE

.else

mov ValidPE, FALSE

.endif

.else

mov ValidPE,FALSE

.endif

FinalExit:

push seh.PrevLink

pop fs:[0]

.if ValidPE==TRUE

call ShowSectionInfo

.else

invoke MessageBox, 0, addr FileInValidPE, addr AppName, MB_OK+MB_ ICONINFORMATION

.endif

invoke UnmapViewOfFile, pMapping

.else

invoke MessageBox, 0, addr FileMappingError, addr AppName, MB_OK+M B_ICONERROR

.endif

invoke CloseHandle,hMapping

.else

invoke MessageBox, 0, addr FileOpenMappingError, addr AppName, MB_OK+ MB_ICONERROR

.endif

invoke CloseHandle, hFile

.else

invoke MessageBox, 0, addr FileOpenError, addr AppName, MB_OK+MB_ICON ERROR

.endif

.endif

invoke ExitProcess, 0

invoke InitCommonControls

start endp

SEHHandler proc uses edx pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDi spatch:DWORD

mov edx,pFrame

assume edx:ptr SEH

mov eax,pContext

assume eax:ptr CONTEXT

push [edx].SafeOffset

pop [eax].regEip

push [edx].PrevEsp

pop [eax].regEsp

push [edx].PrevEbp

pop [eax].regEbp

mov ValidPE, FALSE

mov eax,ExceptionContinueExecution

ret

SEHHandler endp

DlgProc proc uses edi esi hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam: DWORD

LOCAL lvc:LV_COLUMN

LOCAL lvi:LV_ITEM

.if uMsg==WM_INITDIALOG

mov lvc.imask,LVCF_FMT or LVCF_TEXT or LVCF_WIDTH or LVCF_SUBITEM mov lvc.fmt,LVCFMT_LEFT

mov lvc.lx,80

mov lvc.iSubItem,0

mov lvc.pszText,offset SectionName

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,0,ad dr lvc inc lvc.iSubItem

mov lvc.fmt,LVCFMT_RIGHT

mov lvc.pszText,offset VirtualSize

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,1,ad dr lvc

inc lvc.iSubItem

mov lvc.pszText,offset VirtualAddress

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,2,ad dr lvc

inc lvc.iSubItem

mov lvc.pszText,offset SizeOfRawData

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,3,ad dr lvc

inc lvc.iSubItem

mov lvc.pszText,offset RawOffset

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,4,ad dr lvc

inc lvc.iSubItem

mov lvc.pszText,offset Characteristics

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTCOLUMN,5,ad dr lvc

mov ax, NumberOfSections

movzx eax,ax

mov edi,eax

mov lvi.imask,LVIF_TEXT

assume esi:ptr IMAGE_SECTION_HEADER

.while edi>0

mov lvi.iSubItem,0

invoke RtlZeroMemory,addr buffer,9

invoke lstrcpyn,addr buffer,addr [esi].Name1,8

lea eax,buffer

mov lvi.pszText,eax

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_INSERTITEM,0,addr lvi

invoke wsprintf,addr buffer,addr template,[esi].Misc.VirtualSize

lea eax,buffer

mov lvi.pszText,eax

inc lvi.iSubItem

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi

invoke wsprintf,addr buffer,addr template,[esi].VirtualAddress

lea eax,buffer

mov lvi.pszText,eax

inc lvi.iSubItem

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi

invoke wsprintf,addr buffer,addr template,[esi].SizeOfRawData

lea eax,buffer

mov lvi.pszText,eax

inc lvi.iSubItem

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi

invoke wsprintf,addr buffer,addr template,[esi].PointerToRawData

lea eax,buffer

mov lvi.pszText,eax

inc lvi.iSubItem

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi

invoke wsprintf,addr buffer,addr template,[esi].Characteristics

lea eax,buffer

mov lvi.pszText,eax

inc lvi.iSubItem

invoke SendDlgItemMessage,hDlg,IDC_SECTIONLIST,LVM_SETITEM,0,addr lvi

inc lvi.iItem

dec edi

add esi, sizeof IMAGE_SECTION_HEADER

.endw

.elseif

uMsg==WM_CLOSE

invoke EndDialog,hDlg,NULL

.else

mov eax,FALSE

ret

.endif

mov eax,TRUE

ret

DlgProc endp

ShowSectionInfo proc uses edi

mov edi, pMapping

assume edi:ptr IMAGE_DOS_HEADER

add edi, [edi].e_lfanew

assume edi:ptr IMAGE_NT_HEADERS

mov ax,[edi].FileHeader.NumberOfSections

movzx eax,ax

mov NumberOfSections,eax

add edi,sizeof IMAGE_NT_HEADERS

invoke DialogBoxParam, hInstance, IDD_SECTIONTABLE,NULL, addr DlgProc, edi ret

ShowSectionInfo endp

end start

分析:

本例重用了PE教程2的代码,校验PE文件的有效性后,继续调用函数ShowSectionInfo 显示各节信息。

ShowSectionInfo proc uses edi

mov edi, pMapping

assume edi:ptr IMAGE_DOS_HEADER

add edi, [edi].e_lfanew

assume edi:ptr IMAGE_NT_HEADERS

我们将edi用作指向PE文件数据的指针。首先,将指向DOS header地址的pMapping赋给edi,再加上e_lfanew域值等于PE header的地址。

mov ax,[edi].FileHeader.NumberOfSections

mov NumberOfSections,ax

因为我们要遍历节表,所以必须先获取文件的节数目。这就得靠file header里的Number OfSections域了,切记这是个word域。

add edi,sizeof IMAGE_NT_HEADERS

现在edi正指向PE header的起始地址,加上PE header结构大小后恰好指向节表了。

invoke DialogBoxParam, hInstance, IDD_SECTIONTABLE,NULL, addr DlgProc, edi

调用DialogBoxParam 显示列表对话框,注意我们已将节表地址作为最后一个参数传递过去了,该值可从WM_INITDIALOG 消息的lParam参数中提取。

打造自己的PE系统

2.打造干净清爽的原生WINPE 3.0 天缘昨天介绍了制作WINPE 3.0的相关基础概念和一些准备工作,今天就来和大家一同进入制作WINPE 3.0正题,尽可能的采用图文对照方式讲解,此外,天缘今天还特地买了个金士顿品牌的4G U盘用来测试,就是想顺带把早前网友反馈的金士顿U盘启动问题一起验证一下,虽然手边已有几个,可惜都不是金士顿的一直无法确认早前的几个问题,言归正传,现在就开始制作自己的纯净版WINPE 3.0。 前提条件:上篇文章的相关条件已经“达标”,且已安装好AIK(本文示例就是在AIK工具包环境下),下载请参考上篇文章:共同学习:WINPE 3.0工具包介绍及制作准备。一、启动部署工具命令提示 在AIK安装完成后,我们可以在屏幕右下角的开始菜单中找到部署工具命令提示,至于这些工具的更多用途及下文的个别命令用法,大家可以参考AIK的Windows PE用户手册,限于篇幅,天缘只捡最必要的说一下。 启动部署工具命令提示,只需要在下图位置鼠标右键,选择以管理员身份运行即可,弹出安 全警告并确认即可。 部署工具命令启动界面如下图:

二、自己制作纯净版WINPE 3.0 制作说明:天缘系统Windows 7简体中文旗舰版,Winpe制作环境目标放在D:\mywinpe下面,请注意该目录mywinpe不需要自己创建,下面命令执行会自动创建,制作WINPE版本x86,制作结果ISO格式(可以刻录到光盘也可以写到U盘上)。 1、构建PE环境 命令:copype.cmd x86 D:\mywinpe 命令只需要在上面的执行界面中输入即可,特别注意符号一定要正确,比如反斜杠、分隔符等等,如果您的设置路径跟天缘相同可以直接拷贝本文设置命令,下同不再赘述。 执行结果,如下图:disD

Win7_PE制作(带图的哦)

win7 PE制作全过程 win7PE系统到底是怎样制作出来和想制作一个属于自己的windows7 PE系统,你可以DIY出一个属于自己的PE 系统。 网上都盛传着什么vistapebuilder,win7pebuilder等等软件,这到底是什么回事?其实原理是很简单的,我们制作winodws pe系统都是使用命令行完成的,所以外国哪些高手弄了个大杂烩出来,把所有用到的命令集在一起,让大家使用,而你也可以通过编写它们开放的脚本来DIY 这次给大家介绍制作windows pe系统使用工具微软官方的 Windows? Automated Installation Kit (AIK) for Windows? 7 ,我使用的是英文版,但中文版也有了,习惯就好。 按装过程就不多说了,因为是白痴的系next,next,next….done. 传统方法: 打造一个可引导系统的CD或DVD光盘。它的功能类似于Windows PE,引导系统后可以创建32位的图形界面操作环境,支持网络和远程管理功能,支持FAT32、NTFS、CDFS等各种分区格式,采用800×600的分辨率,可用于诊断或修复系统。目前最新版本支持Windows XP、Windows Server 2003。 步骤1:准备工作 首先在硬盘上腾出一个剩余空间较大的分区(至少有300MB剩余空间),预备存放ISO镜像文件或刻录临时文件,将下载回来的pebuilder3015.zip文件解压缩,然后双击运行pebuilder.exe文件,在弹出的窗口中点击“Next”按钮进入下一步。

步骤2:设置文件源 进入图1窗口,这里需要设置文件源,各个选项的含义如下: (1)Path to Windows installation files:Windows安装文件路径 可以选择安装光盘,也可以选择本机硬盘或网络(这需要事先将安装光盘中的文件复制到硬盘中),Bart’s PE Builder 支持Windows XP Home/Professional、 Windows Server 2003 Web Edition/Standard Edition/Enterprise Edition等版本,可惜的是不支持Windows 2000。 (2)Path to your already installed Windows:本机或网络中已存在的Windows系统 这里显示了从本机所侦测到的Windows系统,例如“C:\WINDOWS”,一般不用更改,当然你也可以选择网络中的其他Windows系统,但需要说明的是必须与“Path to Windows installation files”中的系统版本一致,主要是“\i386\ntdll.dll”文件的版本必须一致。例如系统中的Windows XP已经安装了SP1,但安装光盘却仍然是Windows XP,此时你就只能重新制作一张包含了SP1的Windows XP光盘,否则会提示出错。 (3)Add files/folders this(custom)directory to ISO:添加自定义文件或文件夹到ISO镜像文件我们可以在这里添加特定的文件或文件夹,例如将Foxmail、FlashGet、QQ等添加进去,直接点击右侧的浏览按钮即可。 步骤3:设置网络服务 如图2所示,如果选中了“Enable Network Support”复选框,那么以后用这张工具盘启动成功后就可以访问网络,不过如果你想使用这一功能的话,你需要事先准备好factory.exe、netcfg.exe这两个文件,或者是 x86factory.exe、x86netcfg.exe两个文件,而且factory.exe文件的版本必须高于5.2.3790,你可以从Windows Server 2003安装光盘的“\support\tools\deploy.cab”压缩包中获取这两个文件,或者从 Windows Server 2003 Resource Kit Tools工具包中获取,这两个文件的容量为12MB。

个性化WinPE封装方法

个性化WinPE封装方法《第一讲----整体思路》 2011-12-03 16:18:15| 分类:Windows PE制作技|字号订阅 很早之前我的文章介绍过什么是WinPE,PE作为系统维护来说是一款非常好的工具,网上有各种版本的下载,本人也提供过本人修改的基于 “XP”“2003”内核的PE(WinPE ),今天提供的方法是自己动手制作“WinPE ”。做好后,和网上下载的别无二致。 对于“生手”来说,过程有些复杂,因此我力求用最“通俗”的语言,来说明制作方法。有必要先说一下制作思路,这样整体有个概念,更容易理解。 一、制作原材料:正在运行的Windows7系统。 二、主要制作工具:微软Windows AIK工具(微软“自动安装工具包AIK”)。 三、主要步骤: 1.设置Windows PE 构建环境(通过AIK工具的命令实现),通过这一步即可得到:映像包(后缀名为.wim,所有操作都是围绕“”文件)。 2.将以上得到的wim包进行“解压”(官方用语:装载映像) 3.将“解压”后的文件,进行“个性化设置”。(官方用语:添加自定义设置) 4.进行自定义操作后,“保存”并将其“压缩”成wim包。(官方用语:提交并卸载映像)

5.生成WinPE的ISO镜像。 四、只需以上步骤即可完成,在“自定义操作步骤”里,有必要做以下解释: 1.直接封装好的WinPE,只有命令行,为了方便,我会讲如何自己添加桌名环境。 2.我会讲如何配置桌名“图标”,添加应用程序。 (为了简化操作步骤,借助第三方软件BsExplorer,当然微软官方的Explorer 也可以)。 -------------------看了以上步骤,是不是感觉十分简单呢 接下来要分五部分讲解: 1.如何添加应用程序。 2.如何配置开始菜单。 3.配置文件。 AIK中的命令讲解。 5.最后的操作。 我写的这几讲,建议生手从开始到最后,仔细阅读,最好一个字都不落下。

制作WINPE启动盘的三种方法

如今Ghost系统安装盘满天飞,任何一个稍有点基础的电脑用户都可以轻松地用“重装系统”来替代“系统维护”,制作系统维护U盘还有没有必要呢?如果在你的生活圈里,你属于电脑“高手”,那么一个趁手的WinPE启动U盘或许会在以下关键时刻给你帮上大忙。 1、当你电脑里的光驱只能用来放杯具时; 2、当你想将当前Win7系统做镜像留念,Ghost却报错不给力时; 3、当你想短期尝试其他操作系统,之后又想让当前系统原始状态原地复活时; 4、当你“忘记”别人的Windows用户密码时; 5、当你误删“艳照.jpg”、“自拍.rmvb”和"隐私自传.txt"等三种超级重要文件时; 6、当你的硬盘因不明原因情绪不稳定时,哈哈; 以下的三种超级方法闪亮登场,让WinPE启动U盘带着电脑飞吧! 制作WinPE系统维护U盘一: 好的工具可以让你事半功倍,这个好工具的名字就叫通用PE工具箱。它好就好在用它制作启动U盘的方法超简单,完全就是安装软件的流程。还有一个好处就是小巧,可以让你闲置多时、小至64MB的U盘变废为宝。请看它的介绍: 通用PE工具箱 1.9.6 | 硬盘、光盘、U盘完美三合一 软件大小:38.5 MB 软件介绍:通用PE工具箱是一款极适合于网管、装机人员使用的多功能WinPE 系统维护工具箱。它基于WindowsPE制作,支持USB 2.0/SCSI/Netcard等设备,操作简便,界面清爽。你可以使用它进行磁盘分区、格式化、磁盘克隆、修改密码、数据恢复、系统安装等一系列日常应急维护工作。相比同性质的DOS系统维护工具,PE工具箱更容易操作、更容易上手。并且它有体积小,启动超快等特点。 STEP 1:通用PE工具箱是一个可执行的安装文件,运行后你需要选择将其安装到U盘。

WIN PE制作教程 (一)

PE制作教程

1. 序言 (2) 2. 教程 (2) 2.1 1.Windows PE入门基础知识 (2) 2.2 2.Windows AIK的初步安装与使用 (5) 2.3 3.PE的基本制作步骤 (10) 2.4 4.对PE的初步DIY (13) 2.5 5.添加explorer (18) 2.5.1 5.1 复制文件 (20) 2.5.2 5.2 修改注册表 (20) 2.5.3 5.3 提交对PE镜像的修改 (35) 2.5.4 附:在已登录系统中修改注册表的办法 (36) 2.6 6. 对注册表的最后修改及添加主题 (37) 2.6.1 6.1 处理SOFTWARE (38) 2.6.2 6.2 处理SYSTEM (40) 2.6.3 6.3 处理Default (43) 2.6.4 6.4 启用主题 (44)

1. 序言 感谢您观看本教程,本教程将循序渐进地教您制作PE。本教程是根据网友地描述,微软帮助文档以及个人经验来写的,在这里感谢原作者!因为本人水平有限,教程中难免有些不足之处,也希望恁的指正,谢谢! 1. Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式 2.Windows AIK的初步安装与使用 3.PE的基本制作步骤 4.对PE的初步DIY 5.添加explorer 6.对注册表的最后修改及添加主题 2. 教程 2.1 1.Windows PE入门基础知识 1. Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式 1.1Windows PE的作用 Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就是“Windows预安装环境”。微软的本意是:WinPE仅用做系统维护,并设置了各种限制。可以简单的理解为:PE是Windows系统的超级精简版、超级权限版(以系统system账户登录)!对于无法进入系统、修复系统、分区、重装系统等问题都可以进入PE进行操作,因此PE是系统维护强大的武器! 微软原版的PE,只有“命令行”即DOS窗口。网上流传的各种版本都是“高手们”修改出来的,甚至有的PE可以作为系统来使用,这都偏离了微软的本意。我不主张“肆意扩展”PE的功能来彰显“技术”,但是“可视化操作界面、常用功能的集成”这些都是必要且必须的,我会在以后的文章中逐一解说。 通常PE启动有两种方式:1.加载到内存2.直接在某个介质(例如光盘)启动。两种方式各有利弊:加载到内存就会对内存大小要求高;直接在某种介质启动速度就会减慢。但是就如今电脑配置飞速发展的趋势来看,内存大小已经不是限制因素,因此多数是以“加载到内存”的方式启动。 1.2Windows PE的命名规则 Windows PE 1.x表示Windows XP内核。(x表示系统版本,例如SP1)

U盘WinPE制作教程

U盘版WinPE制作教程 一般U盘版WinPE都有以下功能: 1.破确登陆密码Win2000/WinXP 2.一键备份、还原系统 3.手动运行ghost备份、安装系统 4.常用分区工具(DM,PQ) 5.支持网络 总之,如果只是用U盘版WinPE重装一下系统的话,U盘版WinPE能完全替代安装光盘,只要一个小小的u盘就行了。 制作U盘启动盘所需软件和文件: ?UltraISO软件 ?PE镜像文件 ?(本教程以风车动力U盘PE的为例,你可以上网找一下这一个PE 文件和UltraISO软件,你可以上百度也可以上多特网搜索“风车动力PE”) 1:首先将U盘插入电脑的USB接口(重要提示:制作过程U盘会被格式化,注意要先备份资料); 2:运行UltraISO.exe程序,选择“文件”/“打开”,选择fcdlwinpe.iso文件,并点击“打开”命令;

3、选择“启动光盘”/“写入硬盘映像”;

4、在“硬盘驱动器”项目中,选择你要制作成启动盘的U盘盘符,如果电脑只连接了一个U盘,则电脑会自动为你选择好U盘,在“写入方式”项目中选择USB-HDD/USB-HDD+或者USB-ZIP/USB-ZIP+,个人建议选择USB-HDD; 5、最后,点击“写入”,等待数秒,程序提示制作成功完成后,就可以拔出U盘了。

6、经上述操作后,打开U盘可以看到以下文件和文件夹,一个一个地把它们的属性中的“只读”和“隐藏”全勾勒上。这样隐藏起这些文件后U 盘看起来不会那么乱,也防止误删除了一些重要文件,使PE不能正常工作。

不懂可以发邮件到:网易邮箱:tangyuantyl@https://www.doczj.com/doc/c36750248.html,联系统我。

WINPE 3.0 教程与制作

WINPE 3.0 教程与制作 第一讲:共同学习:WINPE 3.0工具包介绍及制作准备 前几天有网友希望天缘提供WINPE 3.0下载,目前网上也已经有几种现成的WINPE 3.0,各有特色,不过天缘暂时还没下载验证,所以关于这些WINPE 3.0的可用性安全性如何,暂不可知,不过从本文开始,天缘会有两三篇文章专题介绍自己DIY WINPE 3.0,根据自己的需求加入需要的驱动和工具软件、或是语言包,把这些集成方法看完了,下次再有WINPE 4.0自会变通制作,本文先来介绍一些WINPE 3.0制作基础概念,虽然本文暂不涉及具体操作,但有了本文,后面的制作才会思路清晰,水到渠成。 一、WINPE 3.0介绍 WINPE全称Windows Preinstallation Environment(Windows预安装环境),缩写WINPE,是一个基于在保护模式下运行的Windows个人版内核系统,也可以理解为一个MINI型的OS 系统,常作为安装、故障排除和恢复一个工具,几乎所有的基本功能在WINPE上全部可以实现。目前最新版本WINPE 3.0,请注意,WINPE并不是一个常规用途操作系统,无法作为日常工作使用。 WINPE具有优点有支持NTFS文件系统、TCP/IP网络、32位/64位驱动、WIN32 API、各种媒体(DVD/USB...)等特点,而这些优点正是DOS系统所欠缺或不完善的。 WINPE 3.0的主要功能有: 1、格式化硬盘、分区、安装Windows 7,当然了,早期的WINPE 2.0就支持早期的操作系统,对WIN7安装还是有些限制,这在天缘早前的文章中介绍过。 2、自动或手动排除系统故障,其中自动是指WINPE可以自动启动并运行Windows RE(恢复环境)。WIN RE就是大家在WINDOWS 7启动时按下F8进入的恢复环境,RE也是基于WINPE 的可扩展恢复平台。 3、系统恢复,该功能对OEM制作商和软件供应商(ISV)来说最为有用,比如你的品牌机出了问题,拿到维修哪儿去,他可能只需要插入一个光盘(U盘)然后两个回车就可以完全重建系统。对于用户来说一般作为恢复CD使用(自己DIY的功能可以更强大) WINPE的体系结构图(两个特点:有限服务和保护模式):

轻松制作winpe启动光盘

轻松制作winpe启动光盘 2008-07-28 09:50:38| 分类:电脑维护| 标签:|字号大中小订阅 软件DIY 制作一张超级系统维护启动光盘,用它可将电脑启动到类似Windows的图形界面中,并且还能连接到网络和支持FAT/NTFS/CDFS等文件系统。有了它即使电脑完全崩溃,不能启动也可以将数据轻松抢救出来,甚至还能备份到局域网的服务器中。另外,你还可以集成一些常用工具到该光盘,比如杀毒软件、压缩软件等。 系统出现问题时,我们通常使用启动软盘进入DOS解决问题。随着Windows 2000/XP/2003中NTFS 文件系统逐渐普及,问题变得更加复杂,仅仅使用启动软盘已经无法满足日常需要。微软" target="_blank" Preinstallation Environment,即Windows预安装环境)的启动光盘,提供了对网络和NTFS分区的支持,但它是为OEM和企业客户定制的,普通用户很难得到,而且它是命令行界面,用起来多有不便。 今天介绍的这款叫做Barts PE Builder的工具,可以创建一个完全图形界面的系统维护启动光盘,该光盘可以支持网络和远程管理功能,支持FAT/NTFS/CDFS等各种常见文件系统,可以在里面集成常用的系统维护工具,非常适合系统维护时使用。 Barts PE Builder小档案 软件版本:v3.0.13 软件大小:1060KB 软件性质:免费软件 适用平台:Windows XP/2003 下载地址:http://www.nu2.nu/nu2files/pebuilder3013.zip 一、准备工作 1.系统安装光盘。Barts PE Builder(以下简称BPEB)制作时需要从Windows XP或Windows Server 2003中提取文件,因此需要有相应安装光盘或在硬盘上备份的安装文件,其中Windows XP要求是打过SP1补丁的,家庭版或专业版均可。 2.网络支持文件。要使制作的光盘能支持网络,还需要有两个文件:factory.exe和netcfg.exe,这两个文件有时也叫做x86factory.exe和x86netcfg.exe。要得到factory.exe,可以从Windows Server 2003安装光盘Support\tools目录中的“deploy.cab”文件中找到,或从 https://www.doczj.com/doc/c36750248.html,/download/8/e/c/8ec3a7d8-05b4-440a-a71e-ca3ee25fe057/rktools.exe下载Windows Server 2003的资源工具包,然后用WinRAR打开这个自解压文件中的“rktools.msi”,在其中的“deploy.cab”压缩包中可以找到。netcfg.exe文件可从WinPE1.2、ERD Commander 2002光盘中找到,

使用WinBuilder只需三步即可打造功能强大的Windows8 PE

使用WinBuilder只需三步即可打造功能强大的Windows8 PE—制作教程 今天提供的WinBuilder可以用来制作Windows8PE,即PE4.0。整个过程十分简单,只需要三步即可打造一个功能强大的PE。下面提供软件及教程:

制作教程: 第一步:将原版镜像解压缩后,放到一个文件夹例如F:\Windows8,使用7-ZIP将原版镜像sources目录下的boo.wim和install.wim中的文件分别提取出来,放到某个目录下例如F:\boot、F:\install。(boot.wim中有两个文件夹,提取文件夹2中的文件即可) 第二步:将WinBuilder软件放到C盘根目录下运行,具体设置参见下图。 第三步:设置完毕后点击第二张图片中的“Save/Get Wim Info”,若没有出错点击右上角“Play”。稍等几分钟即可在WinBuilder软件同目录的ISO文件夹中得到boot.wim文件,使用ultraiso把模板中的boot.wim替换即可大功告成 准备软件: 1.WinBuilder 2.7-ZIP绿色版 3.Windows8企业版 4.Windows8PE模板 5.UltraISO绿色版

下载地址: https://www.doczj.com/doc/c36750248.html,/d/5WKJAAIaswBMzwBRf66 https://www.doczj.com/doc/c36750248.html,/share/link?shareid=218053&uk=2903484382 https://www.doczj.com/doc/c36750248.html,/down/index/12055728 https://www.doczj.com/doc/c36750248.html,/blog/static/20922807420127166202916/ https://www.doczj.com/doc/c36750248.html,/down/index/12055949

WinPE3.0入门教程

第一讲:共同学习:WINPE 3.0工具包介绍及制作准备 前几天有网友希望天缘提供WINPE 3.0下载,目前网上也已经有几种现成的WINPE 3.0,各有特色,不过天缘暂时还没下载验证,所以关于这些WINPE 3.0的可用性安全性如何,暂不可知,不过从本文开始,天缘会有两三篇文章专题介绍自己DIY WINPE 3.0,根据自己的需求加入需要的驱动和工具软件、或是语言包,把这些集成方法看完了,下次再有WINPE 4.0自会变通制作,本文先来介绍一些WINPE 3.0制作基础概念,虽然本文暂不涉及具体操作,但有了本文,后面的制作才会思路清晰,水到渠成。 一、WINPE 3.0介绍 WINPE全称Windows Preinstallation Environment(Windows预安装环境),缩写WINPE,是一个基于在保护模式下运行的Windows个人版内核系统,也可以理解为一个MINI型的OS系统,常作为安装、故障排除和恢复一个工具,几乎所有的基本功能在WINPE上全部可以实现。目前最新版本WINPE 3.0,请注意,WINPE并不是一个常规用途操作系统,无法作为日常工作使用。 WINPE具有优点有支持NTFS文件系统、TCP/IP网络、32位/64位驱动、WIN32 API、各种媒体(DVD/USB...)等特点,而这些优点正是DOS系统所欠缺或不完善的。 WINPE 3.0的主要功能有: 1、格式化硬盘、分区、安装Windows 7,当然了,早期的WINPE 2.0就支持早期的操作系统,对WIN7安装还是有些限制,这在天缘早前的文章中介绍过。 2、自动或手动排除系统故障,其中自动是指WINPE可以自动启动并运行Windows RE(恢复环境)。WIN RE就是大家在WINDOWS 7启动时按下F8进入的恢复环境,RE也是基于WINPE的可扩展恢复平台。 3、系统恢复,该功能对OEM制作商和软件供应商(ISV)来说最为有用,比如你的品牌机出了问题,拿到维修哪儿去,他可能只需要插入一个光盘(U 盘)然后两个回车就可以完全重建系统。对于用户来说一般作为恢复CD使用(自己DIY的功能可以更强大) WINPE的体系结构图(两个特点:有限服务和保护模式):

全手工制作WIN8PE,WIN7PE一条龙教程

全手工制作WIN8PE,WIN7PE一条龙教程 背景知识1 什么是Windows PE?1.1 简要介绍Windows Preinstallation Environment (Windows PE) 是一个为Windows 安装而设... 背景知识 1 什么是Windows PE? 1.1 简要介绍 Windows Preinstallation Environment (Windows PE) 是一个为Windows 安装而设计的最小操作系统.它可以用于启动无操作系统的计算机、对硬盘驱动器分区和格式化、复制磁盘映像以及从网络共享启动Windows 安装程序. 微软本意是PE 仅作系统维护,并设置了各种限制.可以简单的理解为: PE 是Windows 系统的超级精简版,以Wim 的文件形式存在,运行于内存中.特别的,也是最有价值的, PE 以系统system 账户登录,这意味着超级权限!对于安装系统、无法进入系统、修复系统、分区等问题都可以进入PE进行操作,因此PE是强大的系统维护工具! 微软原版的PE ,只有"命令行"窗口.网上流传的各种版本都是"高手们"修改出来的,甚至有的PE 可以作为系统来使用,这都偏离了微软的本意.我不主张"肆意扩展" PE 的功能来彰显"技术",但是"可视化操作界面、常用功能的集成"这些都是必要且必须的. 1.2 版本编号 下面简要介绍Windows PE 的命名规则[略去Windows Server 2003/2008/2012]: Windows PE 1.x表示Windows XP内核. Windows PE 2.x表示Windows Vista内核. Windows PE 3.x表示Windows 7内核. Windows PE 4.x表示Windows 8内核. x表示系统版本,例如SP1(带有Service Pack 2) 举例:PE 1.3表示Windows XP SP3内核的PE. 2 Windows PE 的启动过程 Windows PE 4.x(3.x 2.x类似)引导过程[略去1.x]: 2.1 详细过程(微软ADK/AIK说明文档): ①Windows PE 在特定媒体上加载启动扇区.系统将控制传递给Bootmgr.Bootmgr 从启动配置数据(BCD) 中提取基本启动信息,并将控制传递给包含在Boot.wim 文件中的Winload.exe 文件.然后Winload.exe 将加载相应的硬件抽象层(HAL),接着加载系统注册表配置单元和必要的启动驱动程序.Winload.exe 完成加载后,将会准备要执行内核Ntoskrnl.exe 的环境. ②该环境将执行Ntoskrnl.exe 文件.然后Ntoskrnl.exe 完成环境设置.系统将控制传递给会话管理器(SMSS). ③SMSS 加载注册表的剩余部分,然后配置运行Win32 子系统(Win32k.sys) 的环境及其各种进程.SMSS 加载用于创建用户会话的Winlogon 进程,然后启动服务和剩余的非必要设备驱动程序及安全子系统(LSASS). ④Winlogon.exe 根据HKEY_LOCAL_MACHINE\SYSTEM\Setup\CmdLine 注册表值来运行设置.Winpeshl.exe 将启 动%SYSTEMDRIVE%\sources\setup.exe 文件,前提是该文件存在.如果该文件不存在,Winpeshl.exe 将确 定%SYSTEMROOT%\system32\winpeshl.ini 文件是否指定了某个应用程序.如果该文件未指定应用程序,则Winpeshl.exe 将执行cmd /k %SYSTEMROOT%\system32\startnet.cmd 文件.默认情况下,Windows PE 包含启动Wpeinit.exe 文件的Startnet.cmd 文件.Wpeinit.exe 将加载网络资源并协调网络组件(如DHCP). ⑤当Wpeinit.exe 结束时,将会出现命令提示符窗口.当命令提示符窗口出现时,Windows PE 的启动进程结束. 2.2 简单理解:若为光盘启动,引导文件(例:pe.bif)——bootmgr——BCD——boot.wim——启动PE.

windows aik制作winpe

一、准备软件: 1.BsExplorer 2.0 下载地址:https://www.doczj.com/doc/c36750248.html,/down/index/9232563A4909 2.Ghost 11.0 下载地址:https://www.doczj.com/doc/c36750248.html,/down/index/9232626A9993 3.分区软件DiskGenius 下载地址:https://www.doczj.com/doc/c36750248.html,/down/index/9232625A2820 4.资源管理器A43 下载地址:https://www.doczj.com/doc/c36750248.html,/down/index/9232620A2503 二、BsExplorer简介 1.BsExplorer中的文件如下 添加应用程序,实际上就是对bs_desktop.ini文件进行配置。 2.新建文件夹“Programs” 3.然后将BsExplorer文件夹、DiskGenius文件夹、GHOST文件夹、A43文件夹复制到Programs文件夹下。

4.打开bs_desktop.ini,配置以下内容。 [Desktop CFG file Ver.1] <-ItemBegin-> ItemX=20 ItemY=20 Caption=Ghost ExeName=%SystemDrive%\Programs\Ghost\ghost32.exe IconName=%SystemDrive%\Programs\Ghost\ghost32.exe IconNumber=0 ExeDir=%SystemDrive%\Programs\Ghost CmdParam= ShowState=NORMAL <-ItemEnd-> <-ItemBegin-> ItemX=20 ItemY=100 Caption=DiskGenius ExeName=%SystemDrive%\Programs\DiskGenius\DiskGenius.exe IconName=%SystemDrive%\Programs\DiskGenius\DiskGenius.exe IconNumber=0 ExeDir=%SystemDrive%\Programs\DiskGenius CmdParam= ShowState=NORMAL <-ItemEnd-> <-ItemBegin-> ItemX=20

PE制作教程

PE制作教程,转载by YuJiaShu 任何问题联系 QQ:695737438 短号:681050(无重要事情请勿致电,最好QQ联系) 大白菜U盘启动制作工具装机维护版V5.0更新日志: WinPE部分: 1、装机维护版支持虚拟机UEFI启动。 2、新增本地模式和U盘克隆功能,更加方便的进行系统维护操作和U盘启动制作。 3、根据本地模式需要,重新调整启动文件目录结构适应制作和部署的需要。 4、去掉win7PE和超微PE,全新加入win8pe,原生支持usb3.0。 5、win8pe增加F8 F9 F10 F11热键操作,方便快速调用系统部分功能 6、替换Win8pe启动引导文件增加中文显示,个性化Win8PE加载界面。 7、启动自定义ISO/IMG菜单修改为两种加载方式。 8、调整PE启动配置文件加载方式,修正配置文件个别逻辑错误。 9、更新PE系统内部维护工具,Win8PE与03pe系统共用部分外置程序。 程序部分: 1、细节调整和优化 2、调整升级修复提示,使之更明确 3、修正自定义菜单删除所有项目后不能保存的问题 4、增加点击自定义菜单项目可再编辑的功能 5、优化PE智能安装器托盘的扩展工具“重建主引导记录(MBR)”,GHOST后不能进系统可用来修复 6、重写“模拟器”获取磁盘号代码 7、优化主程序获取磁盘号获取 8、增加PE智能安装器GPT磁盘支持 9、增加PE智能安装器64位ISO搜索和加载虚拟光驱的支持 10、增加PE智能安装器多系统判断并在列表标记 11、增加“本地模式”功能,可免U盘安装到你硬盘中、可选择菜单或热键方便启动PE 12、增加自动检查U盘主引导记录(MBR)功能,MBR被破坏即显现该功能按钮,U盘用一段时间后不能启动可尝试修复,免去重新制作的麻烦 13、调整优化智能安装器分区信息获取 14、增加驻U盘启动制作工具 15、修正转NTFS格式时有卷标会转换失败的问题 16、增加智能安装器UEFI挂载和加亮显示 17、安装器增加imagex(WIM)一键备份、还原,支持ISO或直接WIM,支持WIN7、WIN8原生系统一键安装到GPT(UEFI) 18、安装器增加GHO还原后修复引导、支持WIN7、WIN8镜像GHO到GPT(UEFI) 19、安装器增加支持WIM、GHO还原后添加引导到100M系统保留分区 20、调整安装器安装引导代码,并增加WIN7、WIN8安装无人值守 21、调整“个性设置”进度条和菜单位置 22、安装器高级项增加WIM的拆分文件SWM的搜索及还原支持,默认不搜索SWM

详细讲解WinPE制作方法

1、WINPE.INI调用过程WINPE.INI由PE系统的SYSTEM32\PECONFIG.INI指定:如:进程延时=10外部配置文件=外置程序\WinPE.INI 2、编辑PE注册表运行regedit.exe,光标定位到HKEY_USERS或HKEY_LOCAL_MACHINE项,然后“文件-加载配置单元-选择注册表文件setupreg.hiv-随便起个名字如PE-修改-光标定位PE项-文件-卸载配制单元”。 3、menu.lst中磁盘分区的表示方法hdx,yx代表磁盘数,从0开始y代表分区数,从0开始,主分区用了0、1、2、3,所以逻辑分区是从4开始的 4、PELDR跨分区加载文件/rdpath=multi(0)disk(0)rdisk(0)partition(2)\XPE.IMG 5、grubinst_gui的用法1、下载grubinst(grubinst.rar (27.18 KB))2、双击grubinst_gui.exe3、在"磁盘"右面的列表中选择需要安装Grub4Dos的硬盘/软盘,如果你有多个磁盘(包括USB移动硬盘),请留意[]中显示的磁盘大小,以便选择正确的磁盘。4、若需要安装到分区,可点击"分区列表"右面的"刷新"按钮,然后从下拉列表中选择需要的分区(支持FAT12/FAT16/FAT32/EXT2/EXT3)。若需要安装到MBR,这一步可省略。5、若想以后能恢复原来的MBR/BS,则在"保存文件"中输入用于保存的文件名字。 6、点"安装",出现命令窗口,如果看到"The MBR/BS has been successfully installer", 则说明安装成功。当然,以上步骤只是安装启动代码,要能正常启动Grub4Dos,还需要以下的步骤: 7、下载最新版的Grub4Dos。 8、在压缩包中找到grldr,把它放到FAT16/FAT32分区的根目录中。 9、编辑menu.lst文件(应该放在和GRLDR一样的目录里),以配置启动菜单。若没有FAT16/FAT32分区,则不能把Grub4Dos安装到MBR/BS,而只能利用NT的启动管理器启动Grub4Dos:1、下载Grub4Dos,把GRLDR解压到系统盘的根目录里(C:\)2、编辑C:\boot.ini(此文件是隐藏的),在文件的最后加上C:\GRLDR="Load Grub4Dos"3、编辑C:\menu.lst文件,以配置启动菜单。4、下次启动Windows时,会增加"Load Grub4Dos"一项,选择它便能进入Grub4Dos 6、PE引导文件AVLDR.PEPELDRWINNT.SIF这三个文件是必须的,跟PE镜像一起放入C盘再改下boot.ini文件后重启就能看到你要的PE系统了,下面是它们的作用及需要修改的内容:①AVLDR.PE是计算机启动时载入的文件,文件中有1条数据为PELDR的文件名。②PELDR是PE启动载入程序,文件中有7条数据为PE的系统目录名,要根据PE镜像的不同而更改,如I386和WXPE,修改注意区分大小写;还有9条数据为WINNT.SIF的文件名。③WINNT.SIF是引导配置文件,可用记事本打开,内容如下:[SetupData]BootDevice="ramdisk(0)"BootPath="\系统目录名\SYSTEM32\"OsLoadOptions="/minint /fastdetect /rdexportascd /rdpath=PE镜像文件名"例如:[SetupData]BootDevice="ramdisk(0)"BootPath="\WXPE\SYSTEM32\"OsLoadOptions="/minint /fastdetect /rdexportascd /rdpath=WinPE.IS_"④把这3个文件和PE镜像文件都拷到C盘后,记得在boot.ini文件最后一行加上如下内容:C:\AVLDR.PE="启动菜单显示名称随便改"修改注意事项:这3个文件名都可随便更改,AVLDR.PE改名后到④里更新一下,PELDR改名后到 ①里更新,WINNT.SIF改名后到②里更新。 7、改变X盘空间大小提取pecmd.ini文件,将开头的:PLH值改大一点,再放回ISO文件中。其中:P ——表示占内存的百分比L ——表示X盘的最小值H ——表示X盘的最大值,单位Mb 8、NTBOOT的用法nt52为写入2000、XP、2003等老的NT引导,启动后引导ntldr,格式为bootsect /nt52 X:(X为你要写入NT引导的在WINDOWS 下的盘符)nt60为写入VISTA引导,启动后引导bootmgr,格式为bootsect /nt60 X:(X为你要写入NT引导的在WINDOWS 下的盘符)BOOTSECT.rar (31.76 KB) 9、不设置bois也可以从cdrom启动电脑把附件中的文件解压到启动分区的根目录如C:\在BOOT.INI添加一行c:\bootsect.cdr="从光驱启动BOOTSECT.CDR.rar (625 Bytes) 10、menu.lst中的菜单解释title Boot From DOS Toolkit----定义菜单名称#kernel (cd)/BOOT/GRUB/MEMDISK.GZ c=60 h=8 s=36 floppy----指定memdisk内核(现在基本上很少有人用了,所以已经将该命令注释掉,可以直接将该行删除)#initrd (cd)/BOOT/DOS98.IMG c=60 h=8 s=36 floppy---- (memdisk引导img镜像功能,对于大于2.88M的非标准镜像,必须指定CHS参数,这就是memdisk被藐视的原因,因为grub4dos自带的map --mem就不需要CHS参数,比较方便, 这一行也是被注释掉了的,无用)map --mem (cd)/BOOT/DOS98.IMG (fd0) ---- (grub4dos自带的仿真功能,将dos98.img仿真成软盘0)map (fd0) (fd1)---- (将软盘0仿真成软盘1, 这是为了当系统存在物理软驱,或者U盘以zip方式启动后, 可以访问物理软驱和U盘, 以盘符B:来访问)map --floppies=2---- (定义仿真磁盘数)map --hook---- (使仿真生效)chainloader (fd0)+1---- (从软驱0(其实是img仿真的,非物理软驱0)的第一扇区启动)rootnoverify (fd0)---- (设置根为软驱0)boot---- (启动系统)启动基于DOS的镜像都是上面的步骤因为IMG是软盘镜像,所以仿真成FD0如果是基于硬盘的镜像,像mini win98的img则需要将其仿真成HD0 11、PE中加载微软五笔输入法 如何把输入法添加进去PE呢?以微软五笔86为例,仔细分析了一下,它共需要winwb86.IME、winwb86.MB和输入法指示器internat.exe(借用2000的),把这些文件放到system32里面,然后把五笔的注册表信息加进去,最后启动internat.exe,为此编写了一个批处理来完成(这里先假设3个文件已经手工加进去了)。reg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804reg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v IME file /t REG_SZ /d winwb86.imereg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v Layout file /t REG_SZ /d kbdus.dllreg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v Layout Text /t REG_SZ /d 王码五笔型输入法86

W-PE制作使用

图1—第一步:解压下载的WinPEU.rar文件

图2—第二步:点击打开UltraISO.exe程序

图3—第三步:接着双击打开WinPE.iso光盘映像文件(光盘目录那里是“可引导光盘”标 志)

图4—第四步:选择上部菜单中的“启动光盘”/“写入硬盘映像”

图5—第五步:在“写入方式”项目中选择“USB-HDD+”或者“USB-ZIP+” 最后,点击“写入”,等待数秒,提示“刻录成功”后,就表明已制作完成 提示:“写入方式”可以尝试选择,只要制作完毕以后能够成功启动电脑即可 “硬盘驱动器”选项中,系统会默认你的U盘,不会对电脑的硬盘进行操作,故大可放心(本界面为8G的台电U盘制作情况,制作完成后曾在多台电台尝试启动并成功)

图6—第六步:提示“刻录成功”以后,点“返回”按钮退出制作(这是另一次使用1G的金士顿U盘制作的情况,该U盘制作也能成功启动电脑) 荞麦提示: 1)该下载包是荞麦使用下载的“通用PE工具箱”生成WinPE.iso映像文件,然后与UltraISO程序一并压缩成WinPEU.rar。使用UltraISO.exe程序,几秒钟即可制作好U盘WinPE 启动盘,制作非常简单与方便。 2)可以使用UltraISO.exe查看WinPE.iso的内容,修改、替换有关文件,增删工具软件,打造自己的个性化WinPE启动U盘。当然,我们也可以在安装以后的PETOOLS目录中进行个性化设置。PETOOLS目录就是外置工具软件目录,Setting.ini是配置文件。对于1.9以前的版本,外置程序是可见的,可直接对照配置格式自己增删工具软件,配置对应的显示菜单;对于1.91以后的版本,外置程序是打包在PEtools.wim文件中的,程序不可见,

WinPE 3.1制作

WinPE 3.1制作指南(一) 前言 这是一个写给PE初学者的教程。高手请飘过。。。。。 本教程是本人制作WinPE 3.1的亲身经历,这些知识主要来源于本人制作WinPE的一些积累、微软WAIK的帮助文件,当然肯定会参考网上其他人制作的PE,很多问题也是通过百度、Google解决。PE制作需要的计算机知识并不难,但是涉及面非常广,本人的水平也有限,一本教程不可能包罗万象,也难免会有错漏;我只是尽我所能,希望给PE入门者提供一个PE制作的详细解说,使入门者能尽快制作出属于自己的PE。 第1章制作源生WinPE 3.1 1.1准备工作 WinPE基础知识请大家自行百度。 1.1.1下载Windows AIK 要制作源生WinPE 3.1,需要从微软官网下载如下软件: 自动安装工具包:Windows Automated Installation Kit(简称WAIK),我们需要下载的是WAIK 3.0(KB3AIK_CN.iso)以及3.1的补充包(waik_supplement_zh-cn.iso)。 PS:WAIK 3.0可以制作WinPE 3.0,补充包就可以做3.1了。 请自行在微软官网下载,软件很大。 1.1.2工具软件的准备 ①虚拟机软件 VMware。制作过程中需要反复测试系统,所以这个是必须的。

② UltraISO 用来制作ISO文件的利器。 ③ Win7 SP1中文版安装镜像 如果你目前电脑上安装的系统就是Win7 SP1也是可以的。 ④ 7-Zip压缩软件 7-Zip的优点是可以直接处理wim文件 1.2预备知识 要制作WinPE 3.1,了解以下知识很重要。下面这些资料复制于WAIK的帮助文件,请仔细阅读体会。 1.2.1 WinPE 3.1的启动过程 ①加载特定媒体上的启动扇区(MBR)。将控制传递给 Bootmgr。Bootmgr 从 启动配置数据 (BCD)中提取基本的启动信息,并将控制权传递给 Boot.wim 中包 含的 Winload.exe 文件。然后Winload.exe 加载相应的硬件抽象层 (HAL),并加 载系统注册表配置单元和必需的启动驱动程序。完成加载后,将会准备执行内 核 Ntoskrnl.exe 的环境。 ②执行 Ntoskrnl.exe,完成环境设置。将控制权传递给会话管理器 (SMSS)。 ③ SMSS 加载注册表的剩余部分,配置运行 Win32 子系统 (Win32k.sys) 的环境 及其各种进程。SMSS加载用于创建用户会话的 Winlogon 进程,然后启动服务 和剩余的非必要设备驱动程序及安全子系统(LSASS)。 ④Winlogon.exe 根据注册表值 HKLM\SYSTEM\Setup\CmdLine 来运行设置。 如果存在%SYSTEMDRIVE%\sources\setup.exe,Winpeshl.exe 将启动它,否

相关主题
文本预览
相关文档 最新文档