微软官方背景资料:如何通过Sysprep准备磁盘复制所需的映像
Windows 如何确定 ACPI 兼容性安装 Windows XP 或 Windows Server 2003 之后的 HAL 选项众所周知,微软自带系统封装工具SYSPREP,可以方便快捷地进行企业产品部署,但是在WINDOWS LONGHORN之前,运用SYSPREP有一个限制,就是仅适用于用于封装的源计算机和目标计算机必须具有相同硬件抽象层 (HAL) 因此,不同的网友均提出了不用的HAL检测解决方案,如ACPI封包、死性不改的电源模式等等,这些解决方案不同程度存在几个缺点: 1、检测的兼容性无法达到100%; 2、检测需要额外的文件,并且可能需要重新启动计算机,耗费了时间 有没有一个最完美的解决方案呢?答案其实就在微软未公开的技术。笔者通过对于WINDOWS LONGHORN各内测版本进行分析,现在公开微软部分未公开的技术: 1、微软自WINDOWS LONGHORN后,改写了NTLDR的部分代码,提供了/detecthal 接口 2、BOOT.INI支持/detecthal参数,以实现与NTLDR的结合, 并实现开机启动即自动检测 HAL 3、\INF\dtecthal.inf是一个关键性文件,提供各种HAL类型检测的参数说明 以下为进行SYSPREP封装后的自动完美检测HAL具体实现方案: 1、从系统中提取相应的HAL文件包:(WIN2000在SP4.CAB/WINDOWS XP SP2在SP2.CAB/WINDOWS 2003在SP1.CAB) halacpi.dll halapic.dll halmps.dll halaacpi.dll halmacpi.dll hal.dll---->并更名为halstnd.dll ntkrnlmp.exe ntkrnlpa.exe ntkrpamp.exe ntoskrnl.exe---->并更名为ntkrnlup.exe 2、将上述相应的HAL文件包拷贝到系统\WINDOWS\SYSTEM32\(WINDOWS 2000为\WIN NT\SYSTEM32\) 3、将以下代码保存为dtecthal.inf并拷贝到\WINDOWS\INF\(WINDOWS 2000为\WINNT\INF\)如果不可见,可在文件夹选项里在“显示所有的文件和文件夹”打上勾和“隐藏受保护的系统文件”去掉勾。 [Version] signature="$Windows NT$" DriverVer=07/01/2001,5.1.2600.2180 [hal] acpipic_up = halacpi.dll e_isa_up = halstnd.dll mps_up = halapic.dll mps_mp = halmps.dll acpiapic_up = halaacpi.dll acpiapic_mp = halmacpi.dll ; ; ;------------------------------------------------------------------------- ; Auto detecd Computer HAL with BIOS information ;------------------------------------------------------------------------- ; Copyright(R)1980-2005 Microsoft Crack Center MCC(1980-2005) ; ; tesk work by mstest@MCC 20050515 ; ; mstested@hotmail.com ;------------------------------------------------------------------------- ; ; ; [ACPIOptions] ; This section lists options that affect the installation of ACPI on x86 ; ; ACPIEnable ; 0 - ACPI will be disabled at install time regardless of the BIOS ; 1 - ACPI will be enabled at install time if an ACPI BIOS is present ; 2 - ACPI will be enabled based on the GoodACPIBios list, the NWACL ; and ACPIBiosDate ; ; ACPIBiosDate = mm,dd,yyyy ; Supplies the date that a BIOS must have to be considered good if it is ; not in the GoodACPIBios list. If a BIOS has a date greater than this and ; is not in the NWACL list, then it will be used unless ACPIEnable = 0 ; [ACPIOptions] ACPIEnable = 2 ACPIBiosDate = 01,01,1999 4、修改BOOT.INI 在准备封装的系统后面加上 /DETECTHAL参数如: [boot loader] timeout=0 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /detecthal 5、将LONGHORN版本的NTLDR拷贝到从C:\,覆盖原有的NTLDR 各位也可以参考上传附件中的文件包(包含NTLDR、DTECTHAL.INF、BOOT.INI示例)补充: 只要在在SYSPREP完成后,删除的注册表里面的旧HAL信息就可以自动识别了。没有成功的朋友可以试试. HAL的信息的注册表的位置: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL 先修改权限,然后删除就可以了只要在SYSPREP后删除键值重启就可以自动识别了下面为进行SYSPREP的操作步骤: 1:用mcc的方法覆盖文件 2:修改Boot.ini 3:更改电源管理为Standard PC 4:更改IDE控制器为标准双通道 PCI IDE 控制器 5:Sysprep封装,选退出 6:删除XXX.HAL: 7:重新启动做GHO 注意:本机恢复会无法识别的,只是Standard PC, 但我觉得没什么影响,可以正常开关机的 2000本人没有测试,具体详情大家可以一起探讨 引用完毕。 此方法说到底是微软的原创,于05年被一些精英前辈们写成教程,到现在用的人不多,也不知道为什么^_^ 这片文章非常详细讲明了如何来做dohal,这里有几个操作的环节提醒大家: 一、LONGHORN版本的NTLDR是英文的,如果直接使用对电源判断没有影响,但之后的启动菜单会是英文。 解决办法: 1.用mcc的方法覆盖文件,即批处理调用的方法将系统原来的NTLDR和boot.ini覆盖 将系统原来的NTLDR和boot.ini重命名为NTLDRxp和bootxp.ini 建立批处理run.bat 命令如下: @echo off cd\ attrib ntldr -h -s -r del ntldr attrib ntldrXP -h -s -r ren ntldrXP ntldr attrib ntldr +h +s +r attrib boot.ini -h -s -r del boot.ini attrib bootXP.ini -h -s -r ren bootXP.ini boot.ini attrib boot.ini +h +s +r del %SystemRoot%\run.bat exit 将run.bat放于c:\windows,并在sysprep.inf中[GuiRunOnce]字段下添加Command0=run.bat使之可以被调用 2.将系统原来的NTLDR和boot.ini做成自解压程序*.exe在xplode中调用即可,自动进行两个文件的覆盖。 二、注册表修改 上文中提到删除ACPI_HAL项,大家不要限制于上文列举的注册表项,最好手动搜索一下,我的经验是ACPI_HAL共有四项。因你使用的系统版本不同或是否集成sata scsi 等原因(这个不确定的),ACPI_HAL在注册表中的实际位置不同,一定要删除干净才能做的100%电源判断 |
|
来自: mengxianglove > 《我的图书馆》