网络第一篇WIN7封装深入研究教程步步为营封WIN7有图版.doc
-
资源ID:36225953
资源大小:8.19MB
全文页数:80页
- 资源格式: DOC
下载积分:25金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
网络第一篇WIN7封装深入研究教程步步为营封WIN7有图版.doc
自由天空出品,必属精品!Win7时代是一个崭新的时代,从这里开始,我们所有人又回到了同一起跑线上。无论您以前是高手还是菜鸟、接触或没接触过这门技术,从 Win7开始我们都是从 0 开始。步步为营封 Win7分为 6章讲解 Win7封装:0步步为营封 Win7引言: 1步步为营封 Win7基础: 2步步为营封 Win7驱动处理: 3步步为营封 Win7磁盘控制器: 4步步为营封 Win7初级部署控制: 5步步为营封 Win7进阶部署控制: 步步为营封 Win7循序渐进、由简到繁、图文并茂的逐步讲解 Win7 封装与部署技术,是您学习这项技术最好的教程。诚然,我个人也无法保证这篇教程中的每个字都是正确的,但本教程的最终目的是打造一个共同交流技术的环境,形成最优的技术交流氛围,从而达到方便更多人的目的。记住:从来就没有高手,只要用心,人人都是高手!一、步步为营封 Win7引言WIN7 RTM 发布已经有好几天了,其实我从最早 VISTA 时就研究过 WIN6.X 这一代系统的封装,之前又在 WIN7 7264 版本上实践过部分 WIN7 封装技术。想了很久,不想像以前那样只发个傻瓜化的工具给大家用,因为那样会使很多技术变得封锁起来,所以我决定写这篇教程。这篇教程可能会分成很多章节,我会每隔 13 天更新一章,在这期间我会和大家一起一步步的完成对 WIN7 的封装,并和大家共同探讨这其中的问题,很渴望大家能积极参与。今天我只写了个引言,也算是我的一些感慨,不过我仍请大家细读一下这个引言,这将为我们今后一起研究 WIN7 封装打下良好的基础。引言虽然是引言,但是我仍请大家耐下心来阅读,我相信本文即使是引言部分也可以给您带来些许收获。(一)现状!傻瓜式工具最终造就了什么?本来制作各类智能化工具的初衷是提高工作效率、降低技术门槛以与减少不必要的人力物力消耗,但从实际情况看,并非是如此。)工具越来越智能,操作的选项越来越少,很多以前需要大量手工操作的事情现在变得按一下按钮一切搞定。诚然,这提高了工作效率,但也一定程度上的封锁了技术,降低了真正技术的交流。试问有多少人了解这一个按钮后面的真正技术?有多少人真的明白智能化工具究竟做了哪些事情?越来越少的人关心封装部署技术的核心部分,越来越多的人只追求封个系统了事,太多人习惯于浮于表面的所谓技术交流,太多人习惯于等待高手做出“按一个按钮解决一切事情”的工具。如果有太多人依赖智能化工具,那将有太多人不明白这项技术的真谛,那会导致只有太少的人能进行这方面的技术交流。技术交流渠道越来越窄,技术水平发展速度越来越慢,技术层次越来越低,这样的结果又有几个人希望看到?本文立足于这个现状,借微软 Windows7操作系统的发布,和大家一同探讨系统封装与部署技术。当然,由于 Windows7 是最新的操作系统,本文又写于 Windows7 刚刚发布之际,如文中有各种差错,还请大家谅解。本文的最终目的,旨在让人人都能真正理解这项技术,从而逐步构造一个技术交流的氛围,最终打破现在“等工具,封装,等工具,封装”的现状,共同构筑大家的技术共享平台。(二)封闭?天空的最初原则就是开源,“技术开源传万世,共同革新同提高”是自由天空最初的口号,同样是最终的目的。但同样,我也不只一次的听别人说我们天空变质了,变得不乐于开放技术了,是吗?开源是什么,这里不多说,有兴趣多问问百度和谷歌。但我要强调的是,开源绝不是某些人认为的“开源就是可以随便拿走,稍加修改就可以说是我自己原创!天空写出的教程,被不良居心的人拿走,改改作者名即说教程中的滴滴汗水都是他们原创;天空研究的代码,被无德无知的人拿走,改几个变量名就说代码中的种种心血都是他们原创;天空整理的驱动,被无能无术的人拿走,复制粘贴一下就说那大量的时间和精力都是他们的原创!当这些人被追问时,他们经常反咬一口,“你们不就是开源吗?”、“开源不就是可以随便拿走吗?”、“网络不就是这样吗?”。诚心的请问你们真的懂什么是开源吗?试问各位天空论坛的老坛友,大家记得天空从创建到今天各种剽窃事件发生了多少起?而这次次事件又让天空寒透了多少回的心啊!由于这些无德之辈的存在,我们无法全心全意的开放与交流技术,他们实在令我们每一个开源者无法敞开心扉和大家交流。最终是谁封闭了技术?大家心领神会吧。(三)概念!如果基本概念搞不清楚,那么技术就会有倾斜;如果太多的基础概念搞不清楚,成就的技术绝不能称为技术。没有哪个数学家不懂一元一次方程的,没有哪个物理学家搞不清楚牛顿定律的,系统封装与部署也是一样。1、什么是系统封装我不想用官样的语言来描述这个概念,想必没人想看微软式的帮助你读得懂每个字,就是看不明白说的什么意思。那么我就用最普通的方法来描述这个概念:系统封装就是将系统打回到“准备状态”,从而可以部署至更多的计算机。我们可以将A计算机中已经安装好了的Windows7进行封装操作,从而A计算机中Windows7 重新进入了“准备状态”。而后通过微软官方映像工具(ImageX 等)或者第三方映像工具(Ghost 等)对 A 计算机中的 Windows7 进行备份,而后再通过这类工具将 Windows7处于“准备状态”的映像恢复到 B 计算机中。而后 Windows7 在 B 计算机中开始执行部署过程。A 计算机中安装好的 Windows7封装“准备状态”的 Windows7备份到Windows7映像恢复到B计算机B计算机中的Windows7开始部署 B计算机中安装好的Windows7。系统封装是一种快速的将一台计算机中的操作系统快速的部署于多台计算机的技术,系统封装和部署过程中,很多系统设置会还原到最初值,所以部署到其他计算机中的系统可以一定程度上认为是全新的系统当然,某些设置、软件的安装、补丁的安装、系统优化等还是保留的。2、封装部署不是克隆或许是使用到了 Ghost,或许是早年部分人图方便直接使用了 Ghost 对系统进行克隆,让系统封装与部署莫名的背上了“克隆版”的黑锅,同样也被扣上了各种“不稳定”、“不如安装版”的不明不白的怀疑。上文已述,Ghost 只是一个映像工具,负责的仅仅是“将封装好的系统进行备份为系统映像”和“将系统映像恢复到其他计算机”这么一个工作,Ghost本身并未参与系统封装和部署的任何一个过程。如果你喜欢,还可以用 ImageX、ATI 等映像创建与恢复工具,不一定要用Ghost。所以,“克隆版”只是很多不明技术真相的人的一个很不专业的通称而已。至于封装部署的系统是否没有安装版稳定,个人感觉不是个需要讨论的问题。系统安装技术来自于微软本身,而系统封装与部署技术也来自于微软本身,自家兄弟的强弱与否貌似毫无争论的必要。由于曾经存在过的各类改版系统采用了系统封装与部署技术,很多这种改版的制作者又对系统进行了各种精简优化操作、使用了不成熟的磁盘控制器驱动技术等,从而总是让封装部署版的系统带有相对“不稳定”的特性。这种不稳定完全由改版制作者的技术决定,与封装部署技术本身的稳定性毫无关系。3、封装部署不是盗版前文已经多次提到,系统封装与部署技术就是微软自家的技术,目的是提高系统安装速度、降低 IT 专业人士重复的机械操作。由于这项技术的这种优势和特性,使得很多计算机销售商乐于使用这种技术,毕竟不可能总是重复为每一台计算机安装系统、打补丁、装软件等机械过程,这会带来不必要的人力物力损失。由于国内大部分人对操作系统版权意识的淡薄,而正版 Windows 操作系统的价格又居高不下,导致了不少人动了歪念头。例如经典的使用 XP 大客户版制成封装部署版,以盗版光碟或网络传播的方式散布盗版系统。盗版系统的制作者采用的正式封装与部署技术,因为这种技术最为方便,技术门槛也最低。正是这个原因,让很多人一想到系统封装与部署技术,立刻就联想到了盗版。但这是不公平的,也是没有任何理由的。系统封装与部署技术是一项技术,这是一项可以方便你我他的技术。而有些人将这项技术用于了不正的途径,就像有人拿菜刀砍伤了人一样,砍伤人完全是行为人负责,难道与菜刀有关吗?4、封装工具是什么既然系统封装工具是微软的,那么我们现在常见的各种“封装工具”又是什么?准确的说,现在网络间流传的“封装工具”绝大多数都是“系统封装辅助工具”。这些工具本身并不具有对系统进行封装和使系统进行部署的能力,系统封装和部署仍旧是依靠微软官方的工具。“系统封装辅助工具”的主要职责,是将平时需要手动配置的各种项目图形化和智能化、扩展系统部署的范围与适用性等。这也就是说,“系统封装辅助工具”是辅助我们进行各种操作、扩展系统封装部署性能的工具,它们在执行过程中会调用微软官方工具执行具体项目。(四)技术我们要一起研究这项技术,Windows7 是一个不错的开始,因为在 Windows7 面前我们都是一样的,我们又有了一个新的起点,我们都站在了相同的起跑线上。研究技术最忌讳的事情:1、掺入自己主观观念的技术。不要给自己的技术加入任何主观观念,要客观的看待任何问题,对任何技术的理解必须有理有据,不可主观臆断。2、感觉自己很NB。半瓶子醋总是逛荡的,反倒是满瓶醋逛荡不起来。肚子里稍微有点东西请勿感觉自己牛,可知山外有山、人为有人,况且任何人但凡有一点比你强就是你的老师!3、嘲笑新手。这反映了两个问题,第一,你绝不是高手;第二,心态浮躁。4、过大的询问某个问题。提问时一定要细化问题,不能猛一下提个很“宽广”的问题。例如“谁来教我封装?”、“怎么自动封装?”、“SRS 驱动怎么做?”等。这种貌似只有一句话很简单的问题,其中包含的小问题数绝对都在三位数以上。如果你这样提问,没有人回答你是很正常的,无需抱怨。研究技术,一定要踏踏实实稳稳当当,切忌浮躁。提问前一定要自己先研究,没有失败经历的人绝不可能做成技术。而如果你要提问,则问题越是细化越是可以更快得到答案。从来就没有高手,只要用心,人人都是高手!一、步步为营封 Win7基础一切都得从基础开始,只有懂得和掌握了最最基础的东西,才有可能撑起更多的上层技术。所以我们有必要了解用最基本的方法如何封装 Windows7,从基本逐步延伸到高层。(如下内容以 Windows 7 RTM x86简体中文旗舰版为例)(一)Windows7 的安装这里我不想长篇累牍的讲述如何如何安装 Windows7,在此讨论系统封装部署的各位想必都会安装 Windows7,在这里我想说几点在 Windows7 安装中需要注意的地方。如果我们的硬盘是尚未使用的,如下图:在尚未使用的硬盘上安装 Windows7,分区时会有一些有趣的事情,如下图:1、从 Windows Vista 开始的 Win6.x 这代系统(Windows7 版本号为 Windows6.1,其实和 Vista 一样属于 Win6.x),在执行分区操作时只能创建主分区(如果是我个人技术问题请指正),我不明白为什么微软要这样设定。锁定只能格式化为 NTFS 如果尚可理解的话,只能创建主分区又是什么目的?2、如果硬盘是尚未使用的,为 Windows7 创建分区时会自动创建一个 100M 的所谓“系统分区”,而 Windows Vista SP2 和 Windows Server 2008 SP2 都没有这种现象。这个分区默认是隐藏的,即 Windows7 安装好后是看不到的。经过仔细对比后发现这个 100M 的分区里盛放的是 Windows7 的一些启动相关文件(有兴趣进 PE 查看)。我们暂且把这个 100M 的分区叫做“启动区”,安装系统的分区叫做“系统区”。一开始我感觉很新奇,后来回想一下XP 时代其实微软就已经这样做了,只不过那时候没有现在完善而且不强制罢了。有兴趣的朋友可以试试,在未安装系统的硬盘上安装 XP 时分一个 100M 左右的 C 盘,然后把系统安装到 D 盘去,XP 也会复制它的启动文件到 C 盘,而把系统文件装在 D 盘,这和 Windows7的这种强制做法一致。XP 到 VISTA,包含启动文件的启动区和包含系统文件的系统区同在 C 盘,而 Windows7则是单独划出一个100M的分区当做启动区以盛放启动文件,又将系统文件放置于其他分区。看到这里也发现没什么特别出奇的,只不过是分开放置了一下文件而已,就像 Linux 把/boot 挂载到一个单独的分区一样。这里大多数朋友都看出来了,第一,这个 100M 的分区的实际意义并不是特别强大,而且由来已久,不是 Windows7 特有的;第二,这种把启动区独立出来的方法不方便封装后系统映像的备份与转移工作。既然如此,那么我们就自己划定分区吧,即不用莫名多个 100M的分区,也不用为不能划分逻辑分区发愁。用其他硬盘分区工具操作(注意,强烈不推荐PQ 和 PM),分区后重新进入系统安装过程,如下图:到这个界面猛的熟悉了很多,这是我们最常见的分区模式,那就继续执行我们的系统安装操作吧!稍等片刻后,系统安装完毕,如下图:Windows7 安装好后,会启动一个 OOBE 过程,在这个过程里要输入各项系统设定。这里会强制用户输入一个全新的用户名,并根据这个用户名确定计算机名。Windows7 默认是不允许使用Administrator进行登录的,而是使用刚才我们创建的那个用户。但实践证明,系统封装强烈推荐使用 Administrator 账户(原因后述)。下面我们开启并使用 Administrator 账户,进入计算机管理界面:打开 Administrator 账户的属性,将“账户已禁用”前面的对号去掉:而后删除掉刚才创建的用户账户,如“SkyUN”:这时会有一些提示,建议看一看,然后一路确定下去。用户账户调整完毕后如下图:即计算机内只有 Administrator 和 Guest 两个账户,Admnistrator 账户为启用状态。而后注销当前用户,注销后看到如下图界面:选择 Administrator 登陆系统,进入用户桌面后,对系统简单调整后如下图:到这里,我们就以系统封装为目的完成了对 Windows7 的安装操作,建议使用 Ghost 备份一下当前的系统,以备以后再次使用。(二)Windows7 的封装与部署现在我们使用微软官方的系统封装工具执行一次封装,让大家看看最原始的封装方式是什么样子的。Win5.x(2000/XP/2003)的系统封装工具都位于他们的系统光盘上,而Win6.x的系统封装工具都位于系统分区内。打开C:WindowsSystem32Sysprep文件夹,你就会看到Sysprep3.14 版。运行 sysprep.exe,“系统清理操作”选择“进入系统全新体验(OOBE)”,选中“通用”;“关机选项”选择“退出”如果您想直接重启或关机也可以选择对应选项,选退出是为了方便观察。选项设定结束后,单击“确定”按钮,执行系统封装。sysprep3.14 执行系统封装分为两步:务必在封装时观察是否执行了这两步,sysprep3.14 在 Windows7 下有一定的失败率(高于在 Vista 下的失败率),而且失败的原因莫名其妙,有时因为调整一下页面文件都会造成封装失败,很无语。如果顺利执行完了这两个封装步骤,会看到 Sysprep 文件夹下生成一个封装成功的 TAG文件:其实到这里 Win7 的基本封装就结束了,重新启动计算机,我们看一下 Windows7 的部署过程:1、 更新注册表设置2、启动基本服务3、安装设备驱动4、应用系统设置5、基本部署结束,重启计算机6、又进入了熟悉的 OOBE,新建账户7、使用账户登录进入桌面这样,整个系统封装并部署的过程就完成了。大家可以发现原始的封装部署是一件十分简单的过程,而且操作并不复杂。(三)基本封装部署问与答1、为什么建议使用 Administrator 账户进行封装?(1)如果我们使用普通账户进行封装,封装完毕部署后仍然会进入 OOBE 过程,仍然会要求我们新建一个账户,而且这个账户是不可以与我们之前封装所用的账户冲突的,这无疑形成了一种残留,或者说是冲突。(2)普通账户下,虽然用鼠标双击某些程序可以直接运行,但使用自动化程序调用某些程序、在C盘下建立目录等操作时会有问题,有兴趣可以尝试一下,这对我们下一步的自动化封装部署形成了障碍。(3)我们删除安装时创建的账户,而是用 Administrator 账户进行封装操作,这在程序执行上有很多便利。而且 Windows7 在封装部署后又会自动禁用 Administrator 账户,就像我们第一次安装系统时那样,在部署后的 OOBE时再创建任何账户都不会与当前系统内的账户冲突,就像全新安装系统那样,很是干净。2、Windows7 封装还是否需要卸载驱动?我没有在官方找到相关说明,但根据实际经验来看是需要的。至于为什么我没有在这次演示中卸载驱动,是为了给大家原汁原味的展示微软官方封装部署是个什么样子。3、Windows7 封装部署是否还需要额外的磁盘控制器驱动?这个我可以很确定的说需要。很多偏颇的认识过于神话Windows7,几乎把Windows7吹成无所不能的,但实际绝非如此。诚然,Windows7 集成了一定量的常用磁盘控制器驱动,可以暂时应付常见机型,但并不代表着 Windows7 不需要增补磁盘控制器驱动,更不代表着今后不需要添加磁盘控制器驱动!就像 2001 年时的 XP,当时 XP 的自带驱动也几乎是无敌的,而在 8 年后的今天,没有额外磁盘控制器驱动的 XP 几乎是寸步难行的。所以,磁盘控制器驱动的增补是必须的。4、Windows7 封装部署是否还需要针对硬件抽象层进行修改?首先我们来了解一下什么是硬件抽象层(HAL),我们可以把HAL认为是一组类,虽然我们的计算机硬件配置千差万别,但都可以归为 HAL 中的一个类,例如 XP 时代单核心的计算机归为一类、多核心计算机归为一类等。但到了 Windows7(其实从 Vista 开始就已是如此),HAL 被简化为只有两类,即 x86 的 HAL和 x64 的 HAL。所以我们无需再担心 HAL 的问题,我们只需要知道我们封装的是 x86 还是x64 的系统就可以了。关于 Windows7 的基本封装与部署就介绍到此,希望能给大家带来帮助和启发。篮球天才也得每天练习最基本的运球和投篮,记住这句话。二、驱动处理 (一)简介封装前都会对封装用计算机(源计算机)中的硬件设备驱动进行处理。所谓处理,主要是卸载驱动,以与一些对驱动程序的调整等。为什么要卸载源计算机的硬件设备驱动程序?理论上说,卸载源计算机的驱动不是必要的步骤,Windows 本身就具有对硬件的即插即用能力,例如你添加一块网卡、更换一块显卡系统都会自动帮你搜寻适合的驱动并尝试安装。系统封装与部署技术是将源计算机中的系统封装后部署到其他计算机上,对系统来说并不认为是系统部署到了不同计算机中,而是发现了更多的即插即用设备,系统会为这些“多出来”的设备自动搜索与安装驱动。但是事与愿违,只有实践才能检验理论。在实际的系统封装与部署中,由于硬件不卸载带来的一系列的小问题层出不穷。这些问题中有些的确是由于硬件商造成的,例如 XP 时代经典的声卡 ID 冲突问题;而也有一些也是由于 Windows 本身的功能造成的,例如出现“本地连接 2”等。再加之每个用户都不想要一个“不干净”的系统,所以驱动处理逐渐的成为了必须要做的事情。(二)原理处理驱动程序不是什么难事,估计没有人不会卸载驱动与更改驱动。所以,在本文里我绝对不会和大家探讨怎么一步步的在设备管理器里点鼠标卸载驱动,这无异于浪费大家的时间和精力。我们要讨论的是怎么自动的卸载这些驱动程序,毕竟大家都喜欢双击一个程序解决一切问题的舒适感。今天我们要做的,就是要了解这种舒适感背后的技术。每种硬件都有它们自己的 ID,要查看硬件的 ID很容易,如下图: 从图中可以看到,硬件不只有一个 ID,一般来说一个硬件的硬件 ID(HWD)会有 14个。HWD就像身份证号一样独立标识着每类硬件,所以我们很容易的可以想到会存在一组硬件与 HWID的对应关系列表。如何获得这个列表?打开注册表:HKEY_LOCAL_MCHINESSTEMCntrolSet01Enu可以看到其下的分类,打开某一个分类,例如 Displa,再选取下面的硬件子类,例如我计算机中的:HKEY_LCAL_MACINESYSEMConrolSet01EnumDISPLAYBNQ76D9打 开 后 会 发 现 其 下 有 以 设 备 编 号 命 名 的 设 备 键 , 例 如 我 计 算 机 中 的 : HKY_LOCAL_MCHINESSTEMCntrolSet01EnuDISPLABNQ76D5&5db3ef&0&UD26843559这其实是我的 BENQ显示器,显示器的标识是“5&5d3def&0&ID26843459”,我们来看一下“5&5d3def&0&ID26845459”下的子键,找到“HardwareD”键,它的键值即是我的 BEQ显示器的 HWID当然您的显示器不可能完全与我的一样,但您可以在类似的位置找到您显示器的 HWID。如果您已经找到了,那么可以以此类推看看其他硬件的 HWID。您会发现 HardwreID键包括多个 HWID键值,就像我们在设备管理器里看到的一样。这也就是说,我们可以通过注册表来获取本机所有硬件设备的 HWD列表了!说到这里您大概会有如下两个问题了:1、我们有了 HWID又能做什么?有 HWID就能自动卸载驱动吗?2、怎么获取这个列表,难道要我们手工一个个的复制粘贴吗?下面我们来逐步解决这些问题,我们要用到命令行工具的操作基础和一定的 AU3基础,如果您这两方面比较薄弱,那么建议先多学习一下这方面的知识再来学习如下内容。(三)DevCon.exeDevCon.exe是微软的可代替设备管理器的命令行工具。虽然是个命令行工具,但实际上讲,它有着比设备管理器更强大的性能。如果对此工具有更多兴趣,可以查阅微软官方支持:http:/spport.mcrosoftcom/kb/11272/h-cn DevCon.exe的说明(读取自微软):decon.ex-r-m:<machne><comand><ag>.-r如果指定它,在命令完成后若需要则重新启动计算机。<machine>是目标计算机的名称。<command>是将要执行的命令(如下所示)。<arg>.是命令需要的一个或多个参数。要获取关于某一特定命令的帮助,请键入:devco.exhelp<comand>classfilter,允许修改类别筛选程序。 classes,列出所有设备安装类别。disable,禁用与指定的硬件或实例 ID匹配的设备。driverfiles,列出针对设备安装的驱动程序文件。drivernodes,列出设备的所有驱动程序节点。enable,启用与指定的硬件或实例 ID匹配的设备。 find,查找与指定的硬件或实例 ID匹配的设备。findall,查找设备,包括那些未显示的设备。help,显示此信息。hwids,列出设备的硬件 ID。install,手动安装设备。listclass,列出某一安装类别的所有设备。reboot,重新启动本地计算机。remove,删除与特定的硬件或实例 ID匹配的设备。 rescan,扫描以发现新的硬件。resources,列出设备的硬件资源。restart,重新启动与特定的硬件或实例 ID匹配的设备。stack,列出预期的设备驱动程序堆栈。 status,列出设备的运行状态。update,手动更新设备。UpdateNI,手动更新设备,无用户提示。SetHwID,添加、删除和更改根枚举设备的硬件 ID的顺序。这的确是一个功能很多的工具,但今天我们只需要它的一个功能就可以了,毕竟我们只需要用 DevConexe来卸载驱动。我们来看 Devon.exe的“remove”功能,此功能的语法是:DevCon.exeremoveHIDDevCon.exe的这个功能的主要目的,是移除使用本 HWID的硬件驱动程序。即,我们只要知道设备的 HWID,就可以通过 DevCn.exe的命令行模式将其卸载。例如我们要卸载一个HWD为“PCIEN_100&DEV_433&CC_014”设备的驱动,则:DevCon.exeremovePCVEN_102&DEV_493&CC0104这为我们自动卸载驱动做了最好的铺垫。(四)自动卸载1、自动获取 HWID列表既然我们只要有硬件的 HWID就能卸载该硬件的驱动,那么我们现在就要想办法怎么弄到计算机中所有硬件的 HWID列表了。前文已述,可以通过读取注册表的方法获取 HWID,那么我们就可以通过 AU3实现。Func_DrvUnis_ReadHids() Locl$HwidLst12,$p=1 Locl$RootKy="HKY_LOCALMACHINSYSTEMControlet001Eum" Locl$i=1 Whie1Local$SubKy1=RegnumKey(RootKey$i)Iferror=-1ThenExitLoop$SubKey1=$RootKey&""&$SubKey1Local$j=1While1 Locl$SubKy2=RegnumKey(SubKey1$j) Iferror=-1ThenExitLoop $SuKey2=$SubKey1&""&$SubKey2 Locl$k=1 Whie1Local$SubKy3=RegnumKey(SubKey2$k)Iferror=-1ThenExitLoop$SubKey3=$SubKey2&""&$SubKey3Local$Cls=RegRead$SubKey,"Clas");If$Cls<>"Mouse"And_$Cls<>"Keyoard"And_$Cls<>"Sysem"And_$Cls<>"LegcyDrive"And_$Cls<>"Comuter"And_$Cls<>""Then ReDm$HwidLst$p+12 $HwdList$p0=$SubKey3 $HwdList$p1=RegRead($ubKey3,"HardwreID") $p+=1EndIf$k+=1 WEn $j+=1WEnd$i+=1 WEn Retrn$HwidistEndFunc;=>_DrvUins_Readwids函数_DrvUnin_ReadHwds的目的,即是列举本机 HWD列表。我做一下简单的说明:(1)本函数中通过三层循环,依次读取 Enum键下的设备类、设备子类、设备信息,最终获取每个设备的 HWD;(2)本函数最初创建一个$HwidLst数组,随着读取工作的进行而逐步扩大数据量,$HwdList数组中保存的即为本机 HWID列表;(3)在决定要读取某个设备的 HWID之前,还要判定一下该设备属于哪类设备,通过读取设备信息键值下的 Clss键值实现;(4)在 Winows7下有 5类设备没必要卸载,分别是 PS2鼠标(Mous)、PS2键盘(Keboard)、系统设备(Sysem)、系统遗留驱动(LegacyDrivr)、硬件抽象层(HAL、或称计算机类型、或俗称电源管理)(Coputer),所以只要设备属于这 5类则不加入硬件ID列表。(5)本函数的返回值为一个数组,数组内容即为本机 HWID列表。2、整理 HWID列表同类硬件有相同的 HWD,例如两个相同的网卡,例如一个 CPU的多个核心。HWID是定位到硬件类,而不是像网卡的 MAC地址一样定位到每一个硬件,所以我们获得的 HWID列表中很大可能性的存在相同的 HWD。虽然这些相同的 HWID不会影响我们的驱动卸载质量,但我们没必要增加这额外的重复工作,所以我们有必要整理一下我们刚才获得的 HWID列表。另外,由于我们刚才读取的HarwareID键值是一个“REG_MULT_SZ”类型的键值,所以我们读取的硬件 ID是这么一种形式:HWID1换行符HWID2换行符HWID所以我们在整理 HWID之前必须将刚才的数据进行一定的转化。Func_DrvUnis_TidyHids($HwdList) Locl$tHwidist1,$tp=1 Locl$i For$i=1ToUBound$HwidLst,1)-1Local$Hwids=$Hwidist$i1If$Hwids<>""Then Locl$tArr=Stringplit($Hids,F) IfIsArray($Arr)Ad$tArr>1ThenLocal$jFor$j=1ToUBound$tArr)-1 ReDm$tHwidist$tp+1 $tHidList$p=$trr$j$tp+=1Next EndfEndIf Nex;_ArrayDisply($tHwdList)Local$i,$jFor$i=1ToUBound$tHwidLst)-2 For$j=$i+1ToUBound($twidList-1If$tHwidLis$i<>""And_$tHwidList$=$tHidListjThen $tHidList$=""EndIf NexNext;_ArrayDisply($tHwdList)Local$Hwids1,$p=1Local$iFor$i=1ToUBound$tHwidLst)-1 If$tHwidLis$i<>""Then ReDm$Hwids$p+1 $Hwds$p=$tHwidLst$i $p+=1EndIf Nex;_ArrayDisply($Hwid)Return$HwidEndFunc;=>_DrvUins_Tidywids函数_DrvUnin_TidyHwds的目的是整理刚才我们获得的 HWID列表,简单介绍一下:(1)本函数的第一个循环,将挤在一起的以换行符间隔的 HWID转化成独立的;(2)本函数的第二个循环,通过遍历将重复的 ID设置为空字符串;(3)本函数的第三个循环,将刚才整理过的 HWID列表重新填入$Hwids,并跳过空字符串。(4)本函数的最终目的是返回一个整洁的本