找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5305|回复: 20

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

[复制链接]
发表于 2005-7-22 13:27:11 | 显示全部楼层 |阅读模式
[这个贴子最后由微软破解中心在 2005/07/22 01:33pm 第 3 次编辑]

转载请注明出处,谢谢!
本文仅以WINDOWS XP为例子,同时适用于WINDOWS 2000/WINDOWS 2003
背景资料:微软关于XPE的技术指南:生成和部署 XP Embedded 映像
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”消息。

因此,在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

发表于 2005-7-22 13:35:11 | 显示全部楼层

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

[这个贴子最后由xiamenatc在 2005/07/22 01:43pm 第 1 次编辑]

在用longhron方式安装windows的时候就可以用这种方法检测并替换hal文件,并不用再重新启动,只需在结束setup.exe这个程序后再执行这个脚本。
不过我感兴趣的是那个更好的方法。
回复

使用道具 举报

发表于 2005-7-22 13:42:32 | 显示全部楼层

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

下面引用由xiamenatc2005/07/22 01:35pm 发表的内容:
在用longhron方式安装windows的时候就可以用这种方法检测并替换hal文件,并不用再重新启动,只需在结束setup.exe这个程序后再执行这个脚本。
不过我感兴趣的是那个更好的方法。
回复

使用道具 举报

 楼主| 发表于 2005-7-22 13:45:51 | 显示全部楼层

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

下面引用由xiamenatc2005/07/22 01:42pm 发表的内容:
晚点再公布吧:)
回复

使用道具 举报

发表于 2005-7-22 13:48:21 | 显示全部楼层

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

我自己的方法是直接检测Longhorn PE 注册表
HKLM\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL\0000下
HardwarID的键值。
这个应该也是很准确的。
回复

使用道具 举报

 楼主| 发表于 2005-7-22 13:49:30 | 显示全部楼层

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

下面引用由xiamenatc2005/07/22 01:48pm 发表的内容:
我自己的方法是直接检测Longhorn PE 注册表
HKLM\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL\0000下
HardwarID的键值。
这个应该也是很准确的。
很准确,不过还是多了替换HAL文件的过程
回复

使用道具 举报

发表于 2005-7-22 13:51:16 | 显示全部楼层

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

另一种方法可以支持2000吗?
回复

使用道具 举报

 楼主| 发表于 2005-7-22 13:51:53 | 显示全部楼层

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

下面引用由Ansson2005/07/22 01:51pm 发表的内容:
另一种方法可以支持2000吗?
可以:)
回复

使用道具 举报

发表于 2005-7-22 13:55:06 | 显示全部楼层

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

那就等你公布了。
;)
回复

使用道具 举报

发表于 2005-7-22 15:05:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2005-7-23 11:28:31 | 显示全部楼层

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

[这个贴子最后由xiamenatc在 2005/07/24 08:13am 第 1 次编辑]

用longhorn方式安装后的boot.ini,其中有这么一个参数 /DETECTHAL。
不知道有何意义。
回复

使用道具 举报

发表于 2005-7-23 21:37:39 | 显示全部楼层

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

微软破解中心到底是什么样的猛人吖,从一开始用电脑就不断听到他的名字:)
谢谢你给我们传授知识而不是像中国老功夫师一样将技术压在箱底
你给我启发很大:)
回复

使用道具 举报

发表于 2005-7-25 22:43:20 | 显示全部楼层

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

学习中,感谢大侠分享
回复

使用道具 举报

发表于 2005-7-26 11:14:41 | 显示全部楼层

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

楼主,我下载了你最新发布的XP预安装光盘,测试时选择安装到D盘,结果到最后保存设置时提示找不到C盘的FACTORY.EXE文件,然后就在这一步循环重启,不过再也不提示缺少文件,总是在保存设置的这一步重启。
后来我检查硬盘,发现SYSPREP文件夹在D盘,根本不在C盘,当然找不到,问一下楼主是不是没有考虑安装到非C盘的情况阿?
回复

使用道具 举报

发表于 2005-9-19 08:26:32 | 显示全部楼层

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

dddddddddd
回复

使用道具 举报

发表于 2005-9-19 18:48:07 | 显示全部楼层

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

好帖!
收藏了,慢慢琢磨!
感谢了!
回复

使用道具 举报

发表于 2005-9-19 23:07:58 | 显示全部楼层

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

好深奥  要漫漫琢磨啊
回复

使用道具 举报

发表于 2005-9-20 10:30:39 | 显示全部楼层

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

支持:)
回复

使用道具 举报

发表于 2006-3-31 15:00:15 | 显示全部楼层

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

一年了,第二个更好的办法不知道在哪,似乎MCC很久没来了。。。
回复

使用道具 举报

发表于 2006-4-3 11:21:29 | 显示全部楼层

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

學習中,,,不錯,,,謝了,,,
回复

使用道具 举报

发表于 2006-4-4 19:11:05 | 显示全部楼层

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

下面引用由secowu2006/03/31 03:00pm 发表的内容:
一年了,第二个更好的办法不知道在哪,似乎MCC很久没来了。。。
他现在出书了...................
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-4-16 07:11

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表