[转贴]如何利用WINPE检测自动计算机硬件抽象层?

转自龙卷风极品论坛-微软破解中心
http://bbs2.long-jf.com/showthread.php?t=289740

本文仅以WINDOWS XP为例子,同时适用于WINDOWS 2000/WINDOWS 2003

[url=http://www.microsoft.com/china/MSDN/library/Mobility/embedded/xpesp1BuildDeployImg.mspx]背景资料:微软关于XPE的技术指南:生成和部署 XP Embedded 映像[/url]

[quote]

TAP.exe 最佳做法
TAP.exe 是一种了不起的工具,它能够使 Windows XP Embedded 开发过程变得轻松。然而,与在开发环境中使用的任何工具一样,该工具的使用效果取决于使用它的实现。TAP.exe 能够十分出色地查找系统中的所有硬件,但它经常会找到比最终的嵌入式映像所需的设备更多的设备。

对于在完整的桌面系统(例如,Windows XP)上运行 TAP.exe 的情况,TAP.exe 能够找到操作该系统所需的所有硬件和软件组件。TAP.exe 甚至会找到曾经安装在该系统中但后来又被移除的设备。

因此,非常重要的一点是,使用 TAP.exe 的嵌入式开发人员应该仔细检查导入的 PMQ 文件的结果以查找错误的硬件,以便确保他们所包含的硬件支持不会超出最终的嵌入式映像的真正需要。

使用 TAP.exe 的最佳方式是从 WinPE 环境内部使用它。在 WinPE 环境中运行 TAP.exe 通常会产生目标系统的相当小的 PMQ 或硬件配置文件。其主要原因之一是,WinPE 不会加载诸如广域网 (WAN) 小端口和内核音频子系统之类的软件枚举设备 (swenum),因此产生的 PMQ 文件比较小且更加易于使用。

下面的表格显示了 TAP.exe 能够在各种环境中找到的设备的数量方面的差异:

完整桌面环境
典型的 Windows XP Pro 或 Windows 2000 桌面环境
65到 75 个设备

典型的 Windows XP Pro 或 Windows 2000 膝上型环境
90到 100 个设备

WinPE 环境
典型的 Windows XP Pro 或 Windows 2000 桌面环境
35到 45 个设备

典型的 Windows XP Pro 或 Windows 2000 膝上型环境
45到 55 个设备

正如您可以看到的那样,在 WinPE 环境下运行 TAP.exe 可以产生用于创建最低配置运行时映像的最佳结果。

TAP.exe 会在 WinPE 环境中找到哪些设备?您真正需要的几乎所有设备。它会找到所有核心父设备(如外围设备互联 (PCI) 和图形加速端口 (AGP) 设备)、正确的系统硬件抽象层 (HAL)、磁盘驱动器和 CD-ROM 驱动器、启动系统所需的系统芯片组和关键启动设备以及一些基本通用串行总线 (USB) 设备支持。

返回页首
如何对 TA.exe 和 TAP.exe 进行取舍
目标分析器 (TA.exe) 是另一个可用于查询目标硬件和创建最小内存足迹硬件配置文件的工具,但 TA.exe 缺少查找大多数系统中存在的许多子设备所需的支持。原因在于 TA.exe 的工作方式。

TA.exe 只扫描目标系统的 PCI 总线,并且只定位它可以找到的、附加到系统的 PCI 总线的主要父设备,但 TAP.exe 会扫描系统的注册表以获得检测到的设备的列表。

TA.exe 只有在实模式操作系统(如 Microsoft MS DOS?)中才能正确操作;它没有办法加载或扫描系统的注册表以查找设备。另一方面,TAP.exe 仅在 Windows 2000、Windows XP 和 Microsoft Windows Server? 2003 上受到支持,而在其他任何 Microsoft 操作系统上不受支持。

TA.exe 能找到哪些子设备呢?它只能找到诸如 PS/2 鼠标设备和键盘、通信和打印机端口之类的设备。TA.exe 找不到诸如系统的磁盘驱动器、USB 外围设备和集线器、软盘驱动器之类的设备以及诸如电源按钮、风扇和热量控制之类的高级配置和电源接口 (ACPI) 设备。

在 WinPE 上运行 TA.exe 能够比在 Windows XP 上运行 TA 更快地创建映像,因为 WinPE 不会报告许多由 Windows XP 索引的设备,因而可以得到较小的 .pmq 文件。这一行为类似于在 WinPE 上运行 TAP.exe ? 这与在 Windows XP Pro 上运行 TAP.exe(如前所述)相对。

与 ACPI HAL 和 TA.exe 有关的说明:
关键的 ACPI 组件 ? Microsoft ACPI-Compliant System ? 通常不会被 TA.exe 检测到,因而不会包含在配置中。请确保添加该组件,以避免在 First Boot Agent (FBA) 安装过程中发生崩溃。可以方便地使用 Filter Manager(在目标设计器内部)来搜索所有在其显示名称中含有“ACPI”的组件,以便顺利地定位大多数 ACPI“堆栈”。

另外一个关键的 ACPI 组件是目标硬件上的芯片组的特定集成驱动器电子 (IDE) 总线主控制器。缺少或拥有不正确的 IDE 总线主控制器通常会在 FBA 安装程序首次启动时导致“bug check 7b”消息。

[/quote]

因此,在SYSPREP进行封装后,在制作克隆镜像之前,如需用用WINPE下自动计算机检测硬件抽象层,可以采取以下方式:
1、切换到第二系统引导,使用REGEDT32加载准备封装的系统注册表:C:\WINDOWS\SYSTEM32\CONFIG\SYSTEM,手动删除以下键值:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E966-E325-11CE-BFC1-08002BE10318}\0000
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL\0000
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\PCI_HAL\0000
以上做法是为了确保恢复克隆系统时仅出现一个计算机类型

2、在第二系统将WINPE添加到第一硬盘第一启动分区(通常为C,比如C:\MININT,具体做法请参考微软WINPE2004的OPK光盘说明
3、修改BOOT.INI,添加WINPE引导项目到引导菜单(第二启动项),并设置为默认引导
4、拷贝TAP.EXE至WINPE所在目录:\MININT\SYSTEM32
5、修改WINPE内的STARTNET.CMD文件(通常位于\MININT\SYSTEM32下),在结尾处调入AUTOHAL.CMD批处理文件进行检测硬件抽象层
6、AUTOHAL.CMD批处理文件:
@echo off
if not exist %systemroot%\system32\tap.exe goto quit
if exist %systemroot%\system32\devices.pmq del %systemroot%\system32\devices.pmq
tap >nul
find /i “ACPIPIC_UP” %systemroot%\system32\devices.pmq && goto ACPI
find /i “ACPIAPIC_UP” %systemroot%\system32\devices.pmq && goto APICUP
find /i “ACPIAPIC_MP” %systemroot%\system32\devices.pmq && goto APICMP
find /i “MPS_UP” %systemroot%\system32\devices.pmq && goto MPSUP
find /i “MPS_MP” %systemroot%\system32\devices.pmq && goto MPSMP
find /i “SYSPRO_MP” %systemroot%\system32\devices.pmq && goto SYSPROMP
echo Standard PC bad
goto end

:ACPI
echo Advanced Configuration and Power Interface (ACPI) PC
copy /Y %systemroot%\system32\ntoskrnl.exe %systemDrive%\windows\system32\
copy /Y %systemroot%\system32\halacpi.dll %systemDrive%\windows\system32\hal.dll
goto end

:APICUP
echo ACPI Uniprocessor PC
copy /Y %systemroot%\system32\ntoskrnl.exe %systemDrive%\windows\system32\
copy /Y %systemroot%\system32\halaacpi.dll %systemDrive%\windows\system32\hal.dll
goto end

:APICMP
echo ACPI Multiprocessor PC
copy /Y %systemroot%\system32\halmacpi.dll %systemDrive%\windows\system32\hal.dll
copy /Y %systemroot%\system32\ntkrnlmp.exe %systemDrive%\windows\system32\ntoskrnl.exe
goto end

:MPSUP
echo MPS Uniprocessor PC
copy /Y %systemroot%\system32\halapic.dll %systemDrive%\windows\system32\hal.dll
copy /Y %systemroot%\system32\ntoskrnl.exe %systemDrive%\windows\system32\
goto end

:MPSMP
echo MPS Multiprocessor PC
copy /Y %systemroot%\system32\halmps.dll %systemDrive%\windows\system32\hal.dll
copy /Y %systemroot%\system32\ntkrnlmp.exe %systemDrive%\windows\system32\ntoskrnl.exe
goto end

:SYSPROMP
echo Compaq SystemPro Multiprocessor or 100% Compatible
copy /Y %systemroot%\system32\halsp.dll %systemDrive%\windows\system32\hal.dll
copy /Y %systemroot%\system32\ntkrnlmp.exe %systemDrive%\windows\system32\ntoskrnl.exe
goto end

:end
echo 计算机类型已检测完毕
echo 正在更改引导顺序
bootcfg /Default /id 1
bootcfg /Delete /id 2

:quit
@exit

7、使用第三方克隆工具制作镜像

备注:
A:WINPE的HAL文件尤其是NTOSKRNL.EXE等文件必须以最新的SPX包为基准
如WINDOWS XP SP2:GDR包
如WINDOWS 2000 SP4:SP4.CAB
如WINDOWS 2003 SP1:SP1.CAB

B:以上方法仅适用于一键恢复到第一磁盘第一分区

C:虽然这种方式可以完美检测硬件抽象层,但由于必须加载WINPE,克隆的文件大小多了,时间多了,而且多一次重新启动,所以并不是最好的办法,最好的办法是采用微软另外未公开的技术,这个在下一次公布,CREDIT BY 微软破解中心 GROUP@MCC

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Please Do the Math      
 

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据