融资租赁坏账准备:如何使grub4dos虚拟Winpe后加载外置程序 - 莫名的日志 - 网易博客

来源:百度文库 编辑:中财网 时间:2024/04/27 21:36:32
 

我以下载到的 “WinPE 老毛桃修改之撒手不管版Build 070911”为例,说明如何才能让grub4dos启动镜像后自动加载外置程序。在虚拟机下以光驱方式直接启动,是自动加载外置程序的。但是在grub4dos 用 map 命令虚拟该ISO镜像后启动,常常是找不到外置程序。
title WinPE(ISO emulation)
map --mem /img/maotao.iso (hd32)
map --hook
chainloader (hd32)

先看看该ISO目录结构:
卷 SUPER BOOTCD 的文件夹 PATH 列表

│  AUTORUN.INF
│  WINNT.XPE
│ 
├─MINIPE
│      OP.WIM
│      WINPE.INI
│      WINPE.IS_
│     
├─SETUP
│  │  PESETUP.EXE
│  │  PESETUP.INI
│  │ 
│  └─MYINS
│         
└─WXPE
        NTDETECT.COM
        SETUPLDR.BIN


OP.WIM 是外置程序;WINPE.INI 是外置程序的配置;WINPE.IS_ 就是WinPE的内核,用WinRAR打开,里面是 WinPE.ISO,其实是被压缩了,该ISO的目录结构如下:
卷 MICRO WINPE 的文件夹 PATH 列表

└─WXPE
    │  EXPLORER.EXE
    │  REGEDIT.EXE
    │  TXTSETUP.SI_
    │ 
    ├─FONTS
    │     
    ├─SYSTEM32
    │  │  PECMD.INI
    │  ├─CONFIG
    │  │     
    │  └─DRIVERS
    │         
    └─WINSXS

具体做法是用命令行的 makecab 命令把 WinPE.ISO 打包成 WinPE.cab,然后重命名为WINPE.IS_。按我的理解,启动过程是这样的:解压 WINPE.IS_ 得到 WinPE.ISO,然后挂载到X盘;从X:\WXPE\SYSTEM32\PECMD.INI 中找到 WINPE.INI 的位置然后加载;WINPE.INI 加载 OP.WIM。启动不了的原因是当加载内核 WinPE.ISO 后,按照原镜像的目录结构,找不到 WINPE.INI 或 OP.WIM。(不过我发现启动后,原镜像所在盘都被分配为D盘。当我在优盘启动时,优盘为D盘;我做grub4dos启动光盘,启动后,该光盘也是分配为D盘。所以也可以不按照我下文的方法,直接把外置程序放镜像外面。)

我的解决办法是把这2个文件都放在 WinPE.ISO 中,这样启动后加载这个ISO至X盘,就能在X盘下找到外置程序,因为X盘的盘符是固定的。然后修改相应配置文件到X盘相应目录即可,经实验此法成功!

这里就介绍下操作步骤,相关文件的位置,可以参考以上2个目录结构:
1、用WinRAR打开老毛桃的ISO,提取文件 OP.WIM 和 WINPE.INI;继续打开 WINPE.IS_,提取 WinPE.ISO,最后提取 WinPE.ISO 中的 PECMD.INI。

2、修改 PECMD.INI 中 WINPE.INI 的位置:把 \MiniPE\WinPE.INI 改为 X:\WinPE.INI;修改 WinPE.INI 中 OP.WIM 的位置:把 %CurDrv%\MINIPE\OP.WIM 改为 X:\OP.WIM。

3、用UltraISO对 WinPE.ISO 进行修改:替换PECMD.INI;把 OP.WIM 和 WINPE.INI 添加到根目录,然后保存。

4、用makecab命令对 WinPE.ISO 进行最大压缩,得到 WinPE.cab,重命名为 WINPE.IS_

5、用UltraISO打开老毛桃的ISO,在 MINIPE 目录下删掉 OP.WIM 和 WINPE.INI,用以上的 WINPE.IS_ 替换原文件,然后保存。完成!


--------------------------------------------------------------------------------
以上第四步,简易的办法是,去网上下载个dragmkcab批处理,只要把文件拖到这个批处理上就可以自动打包。我用的批处理 dragmkcab.cmd 如下:
@Echo Off
Title CAB文件夹最大压缩工具—无忧启动
Set Prestr=MAKECAB /v3 /D CompressionType=LZX /D CompressionMemory=21 /D MaxDiskSize=CDROM /D Cabinet=On /D Compress=On
:begin
Set fullname=%~1
Set dirpath=%~dp1
Set srcname=%~n1
if exist "%fullname%\" goto is_dir
:is_file
Set Cmdstr=%Prestr% "%fullname%" "%dirpath%%srcname%.CAB"
%Cmdstr%
Set Cmdstr=
shift
Set tmpstr=%1
if not %tmpstr%=="" goto begin
goto end
:is_dir
Set Cmdstr=%Prestr%  /D FolderSizeThreshold=5000000 /D DiskDirectoryTemplate="%dirpath%." /D CabinetNameTemplate="%srcname%.CAB"
Set Tempfile=%TEMP%\mkcabtmp.tmp
If Exist "%Tempfile%" Del "%Tempfile%" >NUL
SETLOCAL ENABLEDELAYEDEXPANSION
For /f "delims=" %%i In ('dir "%fullname%" /s /b /a-d') Do (
Set subname=%%i
Set "subname=!subname:%fullname%\=!"
Echo "%%i" "!subname!">>%Tempfile%
)
ENDLOCAL
%Cmdstr% /F %Tempfile%
Del /F /S /Q "%Tempfile%" SETUP.INF SETUP.RPT >NUL
Set Tempfile=
Set Cmdstr=
shift
Set tmpstr=%1
if not %tmpstr%=="" goto begin
:end
Set tmpstr=
Set srcname=
Set dirpath=
Set fullname=
Set Prestr=