




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章、硬件驱动的处理6 S+ w0 t3 S f! 2 b( e驱动程序是沟通操作系统和硬件的重要桥梁,通过驱动程序可以让操作系统识别更多的硬件,并使硬件发挥更好的性能。然而封装系统时我们必须要处理一下源计算机的硬件驱动,毕竟你无法确定目标计算机是怎么样的硬件环境。处理好源计算机系统中的硬件驱动,可以拓展系统可部署的范围,减少因系统残留源计算机硬件和驱动信息造成的各种不良影响。虽然我没有在微软官方文档中看到必须处理源计算机硬件驱动的内容,但是根据长时间的实践与应用,在无数前辈们的基础上,我们总结出了一套切实可行的源计算机硬件驱动处理方法,这也是本章将要讲述的重点内容。Windows操作系统是即插即用的,也就是说当出现新硬件时会自动去识别,如果可能则会自动安装该设备的驱动。所以即使我们不处理源计算机操作系统的驱动程序,当系统部署到新计算机时也会自动的识别新硬件,这也可能是为什么微软没有强调封装部署必须处理驱动程序的原因之一。但现实情况事与愿违,某些硬件驱动由于硬件ID的问题本身就存在冲突,某些时候有些驱动程序的残留会造成不良影响等等,这虽然不是Windows的原因而是驱动制作者的问题,但这些情况实实在在的影响了系统封装与部署。1 D7 / i5 S+ u8 j* g1 V我们要讲理论,可也要结合实践,实践才能出真知。本章将结合实践,讲讲在现实中我们应该怎么做。, C9 j0 t* h6 H( N2 p# f 7 P5 ( f0 6 H, M2.1 硬件抽象层(HAL)的处理- y( q/ X9 ( H7 T1 1 s$ u; _ p y$ M v# r2.1.1 什么是HAL6 b# ; Q. |. T- , . p + x5 S硬件抽象层(Hardware Abstraction Layer,简称HAL),位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。简单说就是将硬件抽象化,以利于各种操作。9 Q; H7 f8 s8 U! 如果要查看当前计算机的HAL类型,打开设备管理器,展开“计算机”项目,即可看到当前计算机的HAL类型。HAL类型又被很多技术员称为“电源管理模式”或简称“电源”。 P* T( S9 o0 e8 V, _; E0 B* WWindows XP的HAL有很多种,有“Advanced Configuration and Power Interface (ACPI) PC”、“ACPI Multiprocessor PC”、“ACPI Uniprocessor PC”、“MPS Multiprocessor PC”、“MPS Uniprocessor PC”、“Standard PC”以及等等,种类很多,而且特殊的计算机硬件还会有特殊的HAL。Windows 2000、Windows Server 2003这些与Windows XP同属于Win5.x的操作系统亦是如此,HAL种类繁多。如果算上32位和64位系统的差别,那么HAL的种类至少还要乘2来计算。Windows 7的HAL就简单多了,分为了32位和64位系统两种:“ACPI x86-based PC”和“ACPI x64-based PC”,中文版本可能翻译了其名称,“ACPI基于x86的电脑”和“ACPI基于x64的电脑”。Windows Vista、Windows Server 2008这些与Windows 7同属于Win6.x的操作系统也是一样,HAL简单高效。某些特定机型还有个别专用的HAL,一般用户很少碰到,这里不再介绍。4 b, G, s! V* C- m P 6 y. U根据微软文档的要求,封装与部署不可用于不同HAL的计算机。不同的HAL之间是不完全通用的,如果非要把不适合此计算机的HAL用于此计算机,那么很容易出现各种错误。最常见的例子,如部署有Windows XP某计算机在系统部署后无法正常关机和重启。4 ?- t- S: Z2 K2 o7 y那我们要如何处理HAL,特别是像Windows XP这种HAL非常多的操作系统,难道要手动改吗?莫着急,待我一一道来。2.1.2 Windows XP HAL的处理- x4 A C- - n, p# B; e% I5 b3 c a( X1 3 |4 i$ n9 b4 + Windows XP的HAL最常见的也有6种,既然微软的要求是不同HAL的不可通用,那如果碰到封装时源计算机是A种HAL,而部署的目标计算机是B种HAL,怎么办?手动改?如果部署了500台计算机个个手动改?或者我就封装6种HAL的系统,碰到哪种HAL的计算机就部署哪个系统,这样做不是不可,但一是需要维护至少6个系统映像十分麻烦,二是对于一般的IT人员还真不一定分得开什么计算机用什么HAL。6 h1 f9 i: Y; H( m6 ) e那能不能自动判断并自动更改HAL?勇于探索的前辈们还真找到了方法。这个方法源于Windows XP到Windows Vista之间的年代,那时有一个测试版本,叫做Windows Longhorn。Windows Longhorn虽然没有像现在Win6.x那样将HAL简化到只有32位HAL和64位HAL两种,但Windows Longhorn具备了自动判定计算机HAL并自动更改HAL的能力。由于Longhorn的引导方式与XP无异,都是使用NTLDR引导,所以前辈们完美实现了移植Longhorn的HAL判定到XP!2 M) k9 S/ n3 _9 要准备的文件和程序:4 p f# C ?, T9 v3 A(1)Windows Longhorn的NTLDR,位于Windows Longhorn的C盘根目录下,默认隐藏。 z9 0 a6 b. H K(2)SetACL.exe,用于更改部分注册表键值的权限。移植Longhorn的HAL自动判定到XP的方法:. I- _, v5 ) ?6 |. X$ - R$ 9 L# Z5 1、在当前系统中提取所需文件) b( J& n( b4 y6 I(1)如果系统安装过Service Pack,那么找到“C:WindowsDriver Cachei386”目录下与你当前Service Pack版本相同的.cab文件。例如当前系统是XP SP3,那么找“C:WindowsDriver Cachei386SP3.cab”。如果系统没有安装过Service Pack,那么找“C:WindowsDriver Cachei386driver.cab”。3 E/ + L7 Z6 W6 _: m# X! s(2)新建一个文件夹,如C:WindowsHalCache。(3)将(1)中找到的cab包中的halacpi.dll、halapic.dll、halmps.dll、halaacpi.dll、halmacpi.dll、hal.dll、ntkrnlmp.exe、ntkrnlpa.exe、ntkrpamp.exe、ntoskrnl.exe解压到C:WindowsHalCache文件夹中。(4)将hal.dll改名为halstnd.dll,将ntoskrnl.exe改名为ntkrnlup.exe。) w0 H6 o c$ m- C(5)将C:WindowsHalCache中所有文件复制到C:WindowsSystem32中,覆盖同名文件。0 8 B C! O( L5 |* K( M! z(6)删除C:WindowsHalCache。) g+ 5 v( u$ p( d2、创建一个.inf文件2 K k% t- t5 q9 在C:WindowsInf文件夹(默认为隐藏属性)中创建一个名为dtecthal.inf的纯文本文件,写入如下内容:: G4 i5 p9 _/ Q1 D; l0 C: X- vVersion8 s! Q! ?4 7 _1 _6 f* S. K9 Psignature=$Windows NT$* d5 2 T8 M! G, PDriverVer=07/01/2001halMPS_MP=halmps.dll, L$ P( ) ? _! V& 2 MMPS_UP=halapic.dllE_ISA_UP=halstnd.dllACPIPIC_UP=halacpi.dll0 P t3 L( Z; K V b& ACPIAPIC_UP=halaacpi.dll9 % u8 L- M0 i4 ACPIAPIC_MP=halmacpi.dll# - P ?3 k) & N: H) xACPIOptions4 z5 ?! W Q) R* T9 : _ACPIEnable=2 z; m 6 Q# q w+ XACPIBiosDate=01,01,19993、修改启动文件8 6 M% z( & : f q$ a; i1 y4 ? XC:NTLDR和C:Boot.ini均为具有隐藏属性的系统文件,且具有只读属性,请去掉这些属性后再做下列操作。(1)备份XP的NTLDR为NTLDR_BAK(这个文件没有后缀名)。 J$ x9 R1 T& N% I(2)将Longhorn的NTLDR复制到C盘根目录下。(3)将Bootfont.bin改名为Bootfont.bin.bak,由于Longhorn的NTLDR加载XP的Bootfont.bin会出现乱码的情况,所以先改名,以备以后恢复。(如果你是英文版系统则没有Bootfont.bin,可略过此步骤)(4)打开Boot.ini,找到XP的启动项,例如:* S/ z4 n8 ; A6 w% c4 I E3 g2 t* h& qmulti(0)disk(0)rdisk(0)partition(1)WINDOWS=Microsoft Windows XP Professional /noexecute=optin /fastdetect2 b. % e5 I2 ; V在最后加入自动检测HAL的参数“/detecthal”:multi(0)disk(0)rdisk(0)partition(1)WINDOWS=Microsoft Windows XP Professional /noexecute=optin /fastdetect /detecthal4、处理掉当前的HAL信息一直有的方法说是把当前的HAL改成Standard PC可以提高兼容性,的确改成这个之后无论HAL是什么样的都不会出现如不能启动这种问题,至多是不能正常关机而已,可以说这个的确有很高的兼容性。但经过一段时间的观察、测试和应用,发现这种方法只是个权宜之计。我们既然有了HAL自动判定,且我们担心源计算机的HAL信息会影响系统在目标计算机中的部署,那么我们直接把当前计算机的HAL做掉好了。% 1 ; % P3 r$ i注册表中“HKEY_LOCAL_MACHINESYSTEMControlSet001EnumACPI_HAL”键和“HKEY_LOCAL_MACHINESYSTEMControlSet001Enum RootACPI_HAL”键记录了当前计算机的HAL类型和信息,删除掉它俩就相当于做掉了目标计算机的HAL。0 p# S5 C; w% N* h8 但这两个键都是有保护的,哪怕是Administrator用户都不能随便删除它们,幸好我们刚才准备了SetACL.exe。在命令提示符中切换到SetACL所在目录,运行如下命令:6 n2 d3 Z$ s# M! X Vsetacl.exe MACHINESYSTEMControlSet001EnumACPI_HAL /registry /grant everyone /full2 X8 f3 c) t3 Asetacl.exe MACHINESYSTEMControlSet001EnumRootACPI_HAL /registry /grant everyone /full打开注册表编辑器,删除掉“HKEY_LOCAL_MACHINESYSTEMControlSet001EnumACPI_HAL”键和“HKEY_LOCAL_MACHINESYSTEMControlSet001Enum RootACPI_HAL”键。 m+ E/ . 3 j- S6 G9 N打开设备管理器,可看到以前的“计算机”项目不见了,对,源计算机的HAL已经被我们删除了。当此系统部署到目标计算机时,由于我们已经移植了Longhorn的HAL自动判定,被删除的HAL注册表键会自动创建,且与目标计算机的HAL相匹配。6 o- M$ T8 I. h. R: G经过一番折腾,我们成功的将Longhorn的HAL自动判定功能移植给了XP,由于这种HAL自动判定技术也完全来自于微软,所以正确率和稳定性毋庸置疑。至此,XP由于HAL类型造成的部署适用性问题完美解决。1 _ 0 o3 F7 ? v- Q! O: r* J* K6 - P7 v- E% l# W; m& k2.1.3 Windows XP HAL的自动处理 f( v7 F. C: R# q% v: i3 U5 ; x$ S虽然操作一次2.1.2中的过程并不复杂,但很多人为了达到完美封装经常要几遍甚至几十遍的调整系统并做系统封装测试,那么2.1.2中的过程就变的麻烦了。为了达到便利的操作,减少手工操作可能带来的错误,我书写了一段AU3程序来代替这个过程。注意,为了方便大家的理解,我加入了足够的注释。但这仍是一段简单的代码,为的是给大家展示自动化过程,为大家提供一份参考而已,不具备各种纠错功能。仅算作是抛砖引玉吧。+ R! z: m7 Z: v6 v q4 B( E/ r* K; T N) M1 w6 1 ;将要用到的SetACL.exe和Longhorn的NTLDR编译进此AU3程序2 #Region3 #AutoIt3Wrapper_Res_File_Add=NTLDR_Longhorn4 #AutoIt3Wrapper_Res_File_Add=SetACL.exe5 #EndRegion67 ;执行主函数,而后退出程序8 _DetecHAL_Main()9 Exit1011 ;主函数,调用其他函数完成任务12 Func _DetecHAL_Main()13 ;(1)提取文件,改名,并放置到相应位置14 _DetecHAL_HalFiles()15 ;(2)创建dtecthal.inf及其内容16 _DetecHAL_HalInf()17 ;(3)修改Boot.ini并替换NTLDR18 _DetecHAL_HalBootFiles()19 ;(4)删除源计算机HAL信息20 _DetecHAL_KillCurrentHAL()21 MsgBox(0, , 完成)22 EndFunc ;=_DetecHAL_Main2324 ;由cab包中提取文件,并修改与复制25 Func _DetecHAL_HalFiles()26 ;检测当前Service Pack版本27 Local $SP = OSServicePack28 Local $Package29 If OSServicePack = Then30 ;如果检测不到SP版本则使用driver.cab31 $Package = WindowsDir & driver cachei386driver.cab32 Else33 ;如果检测的到SP版本,则使用与SP版本相匹配的spSP版本.cab包34 Local $n = StringRight($SP, 1)35 $Package = WindowsDir & driver cachei386SP & $n & .cab36 EndIf37 ;使用extrac32.exe解压cab包中的文件38 Local $Extrac = WindowsDir & System32extrac32.exe39 ;创建存放文件的临时文件夹40 Local $CacheDir = WindowsDir & TempHalCache41 DirCreate($CacheDir)4243 ;运行extrac32.exe到cab包中解压所需文件44 RunWait($Extrac & /e /y & & $Package & & & _45 halacpi.dll halapic.dll halmps.dll halaacpi.dll halmacpi.dll hal.dll & _46 ntkrnlmp.exe ntkrnlpa.exe ntkrpamp.exe ntoskrnl.exe & _47 /l & & $CacheDir & , , SW_HIDE)48 ;将hal.dll和ntoskrnl.exe改名49 FileMove($CacheDir & hal.dll, $CacheDir & halstnd.dll, 1)50 FileMove($CacheDir & ntoskrnl.exe, $CacheDir & ntkrnlup.exe, 1)51 ;复制临时目录下的所有文件到Syste32中,覆盖同名文件52 FileCopy($CacheDir & *.*, WindowsDir & System32*.*, 1)53 ;删除刚才使用的临时文件夹54 DirRemove($CacheDir, 1)55 EndFunc ;=_DetecHAL_HalFiles5657 ;创建dtecthal.inf,写入内容58 Func _DetecHAL_HalInf()59 Local $Inf = WindowsDir & infdtecthal.inf6061 ;如果发现已存在同名文件,删除后重新创建62 If FileExists($Inf) Then FileDelete($Inf)6364 ;写入Inf内容65 IniWrite($Inf, Version, signature, & $Windows NT$ & )66 IniWrite($Inf, Version, DriverVer, 07/01/2001)67 IniWrite($Inf, hal, MPS_MP, halmps.dll)68 IniWrite($Inf, hal, MPS_UP, halapic.dll)69 IniWrite($Inf, hal, E_ISA_UP, halstnd.dll)70 IniWrite($Inf, hal, ACPIPIC_UP, halacpi.dll)71 IniWrite($Inf, hal, ACPIAPIC_UP, halaacpi.dll)72 IniWrite($Inf, hal, ACPIAPIC_MP, halmacpi.dll)73 IniWrite($Inf, ACPIOptions, ACPIEnable, 2)74 IniWrite($Inf, ACPIOptions, ACPIBiosDate, 01,01,1999)75 EndFunc ;=_DetecHAL_HalInf7677 ;修改与Longhorn HAL自动判定相关的启动文件78 Func _DetecHAL_HalBootFiles()7980 ;去掉系统目录下NTLDR的只读、系统和隐藏权限81 FileSetAttrib(HomeDrive & NTLDR, -RSH)82 ;将XP的NTLDR改名为NTLDR_BAK83 FileMove(HomeDrive & NTLDR, HomeDrive & NTLDR_BAK, 1)84 ;装载Longhorn的NTLDR到C盘根目录85 FileInstall(NTLDR_Longhorn, HomeDrive & NTLDR)86 ;恢复NTLDR的只读、系统和隐藏权限87 FileSetAttrib(HomeDrive & NTLDR, +RSH)8889 ;去掉系统目录下Boot.ini的只读、系统和隐藏权限90 FileSetAttrib(HomeDrive & Boot.ini, -RSH)91 ;读取当前的启动信息92 Local $s = IniRead(HomeDrive & Boot.ini, operating systems, _93 multi(0)disk(0)rdisk(0)partition(1)WINDOWS, )94 ;如果当前的启动参数中不包括/detecthal,则为其添加此参数95 If Not (StringInStr($s, /detecthal) Then96 $s = $s & /detecthal97 IniWrite(HomeDrive & Boot.ini, operating systems, _98 multi(0)disk(0)rdisk(0)partition(1)WINDOWS, $s)99 EndIf100 ;恢复系统目录下Boot.ini的只读、系统和隐藏权限101 FileSetAttrib(HomeDrive & Boot.ini, +RSH)102103 ;如果系统目录下村咋诶Bootfont.bin则执行如下操作104 ;(英文系统没有Bootfont.bin)105 If FileExists(HomeDrive & Bootfont.bin) Then106 ;去掉系统目录下Bootfon.bin的只读、系统和隐藏权限107 FileSetAttrib(HomeDrive & Bootfont.bin, -RSH)108 ;将Bootfont.bin改名为Bootfont.bin.bak109 FileMove(HomeDrive & Bootfont.bin, HomeDrive & Bootfont.bin.bak, 1)110 EndIf111 EndFunc ;=_DetecHAL_HalBootFiles112113 ;删除源计算机系统的HAL信息114 Func _DetecHAL_KillCurrentHAL()115 ;确定临时目录的存在性116 DirCreate(WindowsDir & Temp)117 ;装载SetACL.exe到临时目录118 FileInstall(setacl.exe, WindowsDir & Tempsetacl.exe, 1)119 ;去掉ACPI_HAL的权限保护120 RunWait(WindowsDir & Tempsetacl.exe & & _121 MACHINESYSTEMControlSet001EnumACPI_HAL & _122 /registry /grant everyone /full, _123 , SW_HIDE)124 RunWait(WindowsDir & Tempsetacl.exe & & _125 MACHINESYSTEMControlSet001EnumRootACPI_HAL & _126 /registry /grant everyone /full, _127 , SW_HIDE)128 ;删除刚才装载的SetACL.exe129 FileDelete(WindowsDir & Tempsetacl.exe)130 ;删除ACPI_HAL键131 RegDelete(HKEY_LOCAL_MACHINESYSTEMControlSet001EnumACPI_HAL)132 RegDelete(HKEY_LOCAL_MACHINESYSTEMControlSet001EnumRootACPI_HAL)133 EndFunc ;=_DetecHAL_KillCurrentHAL134135 复制代码: v; b! . v9 Y E2.1.4 Windows 7 HAL的处理 H: + p# H9 y% V4 x Y% u0 u: J6 W/ c, _: C在2.1.1节中已述,Win7的常见的HAL种类只有x86(32位)和x64(64位)两种:“ACPI x86-based PC”和“ACPI x64-based PC”,这为我们的封装与部署操作提供了很大的方便。我这里对x86和x64两种系统的适用范围再啰嗦几句:0 t1 y6 F( a6 f1 N5 g早期的CPU大多数是32位的,拥有32位CPU的计算机只能安装x86的操作系统。绝大多数软件都是基于32位系统设计的,所以一般而言32位系统对软件的兼容性要优于x64的操作系统。但是32位操作系统的最大内存支持仅有约3.25G(拥有内存扩展寻址的x86服务器版Windows除外),x86的Windows 7虽然会显示您所有的内存容量,但最大仅能使用约3.25G。- k4 M% : d- d# c! j/ t$ L而现今的CPU大多数是64位的,64位的CPU兼容32位,这也就是说拥有64位CPU的计算机可以部署x86的操作系统,也可以部署x64的操作系统。x64的操作系统可以发挥64位CPU的最大潜能,支持64位的应用程序,且兼容32位程序绝大多数为32位的应用程序可以运作于x64操作系统下(某些古老的、国产的、与驱动相关的应用程序除外)。x64的操作系统拥有更大的内存寻址范围,理论上支持2的64次方约16384PB(单位:PBTBGBMB)。对普通用户而言,如果您使用的是x64的操作系统,基本不用考虑内存支持的上限是多少。* z( A/ r/ l4 U: - H5 J总结一下,一般而言:( G. o4 P$ F9 F(1)如果CPU是32位的,只能部署x86的操作系统;(2)如果CPU是64位的,可以部署x64的操作系统,亦可以部署x86的操作系统;+ # H+ X$ D& n. c+ C$ d B(3)x86的操作系统只能运行32位软件,但兼容性较高;(4)x64的操作系统可以运行64位软件,亦可以运行32位的软件,但对某些32位的软件可能不支持;(5)x64操作系统可支持的内存上限高于x86操作系统;(6)上述内容对windows操作系统普遍有效,不只针对Windows 7。9 L1 * % Q& J2 O3 z说完了x86与x64的操作系统,我们再来回头看看Win7的HAL。在排除其他因素(如磁盘控制器驱动、兼容性问题等)的影响后:(1)如果我们封装了具有x86 HAL的Win7操作系统,可以部署于所有拥有32位和64位CPU的计算机。但只支持3.25G内存,只支持32位软件。0 U r+ 0 n2 U2 m+ Y X(2)如果我们封装了具有x64 HAL的Win7操作系统,只可以部署于拥有64位CPU的计算机。支持更大的内存,同时支持32位和64位软件。% ) V; Q6 U: u这样看,只要我们避免将拥有x64 HAL的Win7系统映像部署于32位的计算机中就可以了,不用像WinXP时那么麻烦了!2.2 硬件驱动程序的处理# c H0 u% |0 A- j3 在本文的开篇我已经简单介绍了为什么要卸载源计算机Windows操作系统中的驱动程序。Windows具备即插即用(PNP)能力,即添加或更改一个硬件后会自动的尽可能的为其安装硬件。所以将系统映像部署到目标计算机,对于Windows来说不过是一次性更换了大量硬件而已。所以一定层面上讲,使卸载驱动成为必须要做的过程的并不是Windows本身,而是硬件厂商开发驱动的能力。各硬件厂商的实力不同,自然对驱动程序的开发能力也不相同,有时某些驱动本身就存在一定的BUG(如早年ATI和VIA的驱动),有时不同厂商之间的配合出现一定问题(如Realtek和ADI曾经存在硬件ID冲突问题),有时在源计算机中正常的驱动到了目标计算机上会因为硬件的不同而造成问题(如Intel PPM驱动,到AMD CPU的机器上会蓝屏),这一系列的问题让我们必须要对驱动程序做做文章了。 t; t! F6 a% # j) M& M; Q2.2.1 一般的驱动卸载方法和注意事项0 N) P/ q4 M0 d% p硬件驱动卸载方法我相信大家都会,打开“设备管理器”,展开所有项目逐一卸载就可以了,但是注意下述项目:(1)关于“IDE ATA/ATAPI控制器”1 y/ C; f- p- ) B* B k) J- g3 T( 曾经盛传需要将“IDE ATA/ATAPI控制器”下凡是“某某控制器”一律改为“标准双通道 PCI IDE 控制器”,据说可以加强兼容性。但经过长时间的观察与实践,结合相关理论后,发现这个说法存在一定的谬误。即使都是“标准双通道 PCI IDE 控制器”,但是此“标准双通道 PCI IDE 控制器”非彼“标准双通道 PCI IDE 控制器”。需要为一个硬件安装什么驱动,是由硬件ID(HWID)来决定的。HWID类似人的身份证一样,理论上是一种硬件的唯一编号,而我们再设备管理器中所看到的硬件设备名,都是通过驱动INF中HWID与其名称对应关系来决定的。就像我们有同名但身份证号不同的人一样,存在着都叫做“标准双通道 PCI IDE 控制器”但HWID不同的硬件,且不在少数。5 G/ N c6 q) f* x# c X1 ( P所以即使源计算机中改为“标准双通道 PCI IDE 控制器”,但如果只是和目标计算机中的控制器同名不同HWID,那么就是一种徒劳,且这样会让我们残留“IDE ATA/ATAPI控制器”的驱动,可能会对目标计算机的部署造成影响。那么我们对“IDE ATA/ATAPI控制器”要做的是卸载,而不是修改!对“IDE ATA/ATAPI控制器”执行卸载操作已经经过了实践验证,未发现问题。9 I- E2 0 E# ?( y + (2)关于“计算机”(HAL,或俗称“电源管理”、“电源”) L- T( V/ R# W, z( K% h1 U曾经盛传将HAL改为Standard PC可以提高兼容性,这是仅次于(1)的一个谬误。HAL改为Standard PC倒是还有一点根据,Standard PC是具有最高兼容性的HAL,就像一个人虽然做事做不好,但至少不会出错。使用Standard PC如若出现HAL不匹配问题至多是计算机无法正常关机,计算机电源管理能力下降而已。但是,在2.1.2和2.1.4节中我们已经学习了WinXP和Win7的HAL处理方式,现在我想您也可以看出这个说法的谬误。. X. y) |6 m+ y对于WinXP,我们移植了Longhorn的HAL自动判定,使WinXP同样具备了HAL自动判定能力。同时,我们又使用了其他方法直接删除了源计算机的HAL,干净利索无残留。所以我们针对WinXP的HAL,至多做个卸载工作,如果您不想做也无所谓,反正我们有方法可以直接删除当前计算机的HAL类型。对于Win7,2.1.4节中已经详细说明,只要我们搞清楚我们封装的系统是x86还是x64,要部署的计算机的CPU是32位还是64位就可以了,根本无需专门处理HAL。当然,我们也不要卸载Win7的HAL,这是画蛇添足的行为。总结,根据我们对HAL的认识和已有的处理方法,对于WinXP,至多做个卸载工作,亦可以不做(当然,必须做过2.1.2节中的处理);对于Win7,无需卸载HAL,不用管它。6 b1 x! l: P% F5 , X1 W(3)哪些驱动不需要卸载? 7 $ b r# N8 b% p8 0 J# k 3 k有些驱动经过长期实践发现是无需卸载的,如下:/ h. h. 1 n5 D U# fWinXP:PS2键盘、PS2鼠标、系统设备;Win7:PS2键盘、PS2鼠标、系统设备、HAL。4 q+ * a6 r0 g6 |+ G( u. P+ F P(严格讲,还应包括“遗留设备(LegacyDriver)”,后述)# C% s2 b. t5 b! P+ Q 2 R/ n0 D(4)还有哪些需要特别注意? ! B( Z- N0 A4 R! r第一,某些驱动的卸载是有顺序的,建议按照设别管理器从下到上的顺序执行卸载,某些驱动的卸载可能触发其他驱动的安装。第二,WindowsInf下的Oem*.inf是已安装驱动的INF文件,建议卸载驱动前删除它们,避免个别驱动在被触发搜寻驱动时使用Oem*.inf中的信息执行自动安装。系统部署安装驱动时会自动再生成,无需担心。第三,WindowsInf下的*.pnf,是驱动INF的预编译文件,建议全部删除,系统部署时会自动再生成,无需担心。第四,注意清理一下HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNetwork下的4D36E972-E325-11CE-BFC1-08002BE10318和6BDD1FC5-810F-11D0-BEC7-08002BE2092F键,即删除后重建,否则部署后可能出现“本地连接2”。第五,将HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesintelppm键的Start键值改为3,即将此服务改为手动。IntelPPM驱动是用于Intel CPU的,如果使用Intel CPU的计算机作为源计算机,此服务即会启动,而将此系统封装后部署于AMD CPU的计算机就会造成蓝屏宕机问题。而如果使用AMD CPU的计算机作为源计算机,WinXP下将没有此服务,Win7下则自动设为手动,无需额外处理。第六,尽可能使用硬件较少的计算机作为源计算机,这样可以最大程度的减少被安装驱动的数量。如使用实机,建议在BIOS里关掉不必要的项目;如果使用虚拟机,则尽最大可能所需硬件的数量。建议使用VMware虚拟机,只留下必须硬件,并在BIOS里关掉无用的硬件。传闻中所谓“双核计算机封装的系统好”、“老计算机封装的系统好”等等传闻,绝大多数都是根据表象产生的谬误,技术到家了,用什么都能封好系统!6 F2 n! O6 j! O& ?! n3 y学习了上述注意事项后,您可以开始着手源计算机驱动程序的卸载了。) e I! M8 U3 w. e! T2.2.2 驱动自动卸载(1)DevCon.exe# k7 M E7 k( |) E7 K$ T1 3 DevCon.exe是由微软官方提供的,用于在命令行模式下管理硬件设备的工具。体积很小,但功能很全很强大。有兴趣可以运行一下“DevCon.exe /?”看看它的全部功能,而我们只使用它的驱动卸载功能。使用DevCon.exe卸载一个硬件驱动的方法为:( b3 l$ Q* ( , g- 1 H6 m. DevCon.exe remove HWID$ T6 X+ z9 N 这也就意味着我们只要有这个硬件的硬件ID(HWID),既可以使用DevCon.exe来执行它的卸载。那我们怎么获得所有需卸载硬件的HWID呢?(2)去哪找计算机硬件的ID? p7 a8 X9 U- C通过设备管理器,展开某分类,选中其中某个设备,查看其“属性”中的“详细信息”选项卡,属性项目选择“硬件Id”,即可看到此硬件的HWID。但这是我们手动操作时要做的,自动化程序要怎么做?; b5 u+ * 3 e7 E9 v打开注册表编辑器,展开HKEY_LOCAL_MACHINESYSTEMControlSet001Enum键,可以看到其下按设备类分类了设备。展开其中一个设备类,可以看到其中的设备。再展开设备,看它其下的键,单击一下,看到左侧有个名为HardwareID的子键,它的键值即为此设备的所有HWID!例如我的:+ y$ B+ u6 s6 e/ p% m# k% F& C eHKEY_LOCAL_MACHINESYSTEMControlSet001EnumPCIVEN_1002&DEV_9505&SUBSYS_E630174B&REV_004&204eac5&0&00101 A, y( h* a. j, E6 0 I! n1 L这是我显卡设备的键,4&204eac5&0&0010下的HardwareID子键的键值为:PCIVEN_1002&DEV_9505&SUBSYS_E630174B&REV_00PCIVEN_1002&DEV_9505&SUBSYS_E630174BPCIVEN_1002&DEV_9505&CC_030000PCIVEN_1002&DEV_9505&CC_03008 r9 # D& * _6 U这四个都是我显卡的HWID。6 e, j3 x- R( W2 D- s这样,我们通过遍历HKEY_LOCAL_MACHINESYSTEMControlSet001Enum键下的所有子键,读取HardwareID的键值即可获取计算机中所有的HWID! F# _7 ?# R# (3)驱动自动卸载的实现% ? A& P4 _+ W+ y/ r I f1 ?5 Y! Q6 w% r12 ;将devcon.exe的32位和64位版本均编译进本AU3程序3 #Region ;* 参数创建于 ACNWrapper_GUI *4 #AutoIt3Wrapper_Res_File_Add=devcon_x64.exe5 #AutoIt3Wrapper_Res_File_Add=devcon_x86.exe6 #EndRegion ;* 参数创建于 ACNWrapper_GUI *78 ;运行主函数,而后退出9 _DrvUnins_Main()10 Exit1112 ;硬件驱动程序自动卸载,主程序13 Func _DrvUnins_Main()1415 ;规定一个临时文件夹16 Local $TempDir = WindowsDir & TempDrvUnins17 DirCreate($Te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 京东尚科合同样本
- led灯具采购合同标准文本
- 临时农业种植合同样本
- 关于路灯合同样本
- 会员代理招募合同样本
- 共用线路三方协议合同样本
- 共建共用仓库合同样本
- 上海房屋预售合同样本
- 了解不同国家的调酒文化:试题及答案
- 深入分析2024年国家电网考试试题及答案
- 2024-2025学年下学期高一语文期中必刷常考题之作文
- 2025北京丰台高三一模化学试题及答案
- 安徽省示范高中皖北协作区2025届高三3月联考试卷语文试题(含答案)
- 儿童福利政策课件解读
- 公司关联担保效力裁判规则完善研究
- 茶台买卖合同5篇
- 辽宁省营口市大石桥市第二初级中学2024-2025学年九年级下学期开学考试数学试卷
- 2025年法治素养考试试题及答案
- 居室空间设计 课件 项目一居室空间设计概述
- 2025年临床医师定期考核必考复习题库及答案(900题)
- 3万高炉转炉混合煤气柜技术规程
评论
0/150
提交评论