社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 2549阅读
  • 6回复

[转帖]磁盘控制器驱动集成方略

楼层直达
级别: 管理员
发帖
27788
飞翔币
1567
威望
888
飞扬币
129750
信誉值
0

  如需要转载本帖,请注明 本帖出自:自由天空技术论坛,原作者:Skyfree
第一章、关于磁盘控制器

      Skyfree我在之前不少的教程中都提到过有关这方面的内容,不过由于之前技术水平有限,不能较为完整详细的解释这方面的内容,所以一直感到惭愧。现今,经过了相当长一段时间的学习与实践,我想现在的我应该可以把有关磁盘控制器驱动集成原理的部分较为明了的解释一下了。

      一、正确理解磁盘控制器驱动的含义
      很多朋友将“SATA硬盘驱动”这个词经常挂在嘴边,Skyfree我当年也是这个样子。其实这种说法是一种从表象上看问题的说法,所以有不少的偏差。好吧,现在我要将一个概念深入人心,即“磁盘控制器与磁盘类型没有直接的关系”。当然,或许这个说法也有部分偏差,有兴趣的朋友可以更为深入的研究,并可以找我讨论。
    “磁盘控制器驱动”是针对磁盘控制器的(似乎是废话),而不是针对磁盘(硬盘以及相关类似的存储介质,狭义的可以认为磁盘就是指的硬盘)的。磁盘控制器有主板芯片组自带的,有主板集成的第三方的,也有独立的磁盘控制器卡。磁盘控制器,就像是磁盘到计算机的一个中间介质,简单说,系统是通过磁盘控制器认识磁盘的。所以,如果系统里没有和磁盘控制器匹配的磁盘控制器驱动,是无法识别磁盘的。
      如果对这个不好理解,可以这样来想,例如我们当年的98系统,98系统里没有常用的USB控制器驱动,所以我们的U盘插上后系统识别不出来,而我们现在最常用的XP中包含了大量常用的USB控制器驱动,所以基本上所有的U盘插上后会自动识别出来。这里,你可以把USB控制器看做磁盘控制器,U盘控制器驱动看做磁盘控制器驱动,U盘看做磁盘。USB控制器驱动是为USB控制器装的,而不是为U盘装的。
      说到这里,我们来看一下我们最常见的两种磁盘控制器:
      1、并行磁盘控制器,或者叫做ATA(PATA)磁盘控制器。
      基本上来说,这种磁盘控制器都是为IDE接口的磁盘准备的,而并行磁盘控制器也一般只有并行工作模式。所以,一般来说,并口磁盘所使用的磁盘控制器都是工作在并行模式的并行磁盘控制器。
但也由此,让许多人将这个概念照搬到了串行磁盘控制器上,造成了一些理解错误。
      还有一点,很多人认为IDE的磁盘就不需要安装磁盘控制器驱动,这个也是错误的。并不是因为不需要安装,而是因为系统内已经集成了并行磁盘控制器,就像XP集成了大量常用USB控制器驱动一样。
      2、串行磁盘控制器,或者叫做SATA磁盘控制器。
      SATA磁盘控制器,广义上讲,SATA(Serial ATA)指的是所有的串行磁盘控制器,包括普通的串行磁盘控制器、RAID磁盘控制器、SCSI磁盘控制器等等;狭义上讲,我们普遍的将SATA磁盘控制器理解为普通的串行磁盘控制器,就像你我的计算机上正在使用的这种一样。我们在下文中,都将“SATA磁盘控制器”理解为其狭义概念。
      (1)串行磁盘控制器的工作模式
      串行磁盘控制器比较灵活,不像并行磁盘控制器一般只工作在并行模式,而是可以在BIOS里将其设置为多种工作模式,根据主板BIOS的不同,名称可能有所差别,并行工作模式有:IDE、ATA、PATA等,串行工作模式有:SATA、RAID、AHCI等。
      很多二线厂或者通路商主板上的串行磁盘控制器都默认为并行工作模式,这会折损部分磁盘工作效能,但是却提高了兼容性;很多一线大厂则都是将串行磁盘控制器默认为串行工作模式,这样可以发挥磁盘的最高工作效能。
      所以,请记住,串行磁盘控制器可以在并行与串行两种工作模式间进行调换,而非只工作在串行工作模式。
      (2)串行磁盘控制器的接口
      这好像是个白痴话题,串行磁盘控制器的接口肯定是串口(SATA接口),大多数人这么认为,当然,也包括之前的我。好吧,我们暂且排除有SCSI的特殊接口的串口,只说说我们常见的。
      大多数,应该是绝大多数的情况下,串行磁盘控制器的接口是串口。不过,在某些集成了第三方磁盘控制器的主板上,例如有一块945P的主板上集成了ITE的串行磁盘控制器,它的ITE串行磁盘控制器不仅提供用于组建RAID的SATA接口,同时也提供了组建RAID的IDE接口。所以,IDE磁盘也是有可能工作在串行模式下的,绝非IDE磁盘一定工作在并行模式下。
      综上,我们可以不通过磁盘类型来看问题,也就是说,在今后研究磁盘控制器驱动时我们看到的只有磁盘控制器,至于磁盘是什么样子、什么接口,只是一个可用的参照而已,不是我们主要要观察的东西。
      二、磁盘控制器驱动集成原理
      磁盘控制器驱动的集成方法是由微软提供的,当然不排除很多高人不用这个方法,但是似乎他们都挺喜欢自娱自乐,所以具体这些高人的方法是什么我们不得而知,那么我们这些菜鸟们还是专心跟着盖茨走,看看微软提供了什么样的集成磁盘控制器驱动的方法。
      为了便于理解,我只讲最核心的方法,如果您对此有极高的兴趣,建议您阅读微软在XP原版光盘中自带的Deploy.chm中的相关内容。
      微软提供了这样一种方法,即在Sysprep.inf中添加SysprepMassStorage段,SysprepMassStorage段下内容的写法是:
      硬件ID=硬件驱动Inf文件路径
      例如:
      [SysprepMassStorage]
      pci\ven_10de&dev_0055&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0054&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0267&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0266&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_037f&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0055&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_0054&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_0267&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_0266&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_037f&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      其中像“pci\ven_10de&dev_0267&cc_0101”这类就是硬件ID,硬件ID是每一类硬件专用的唯一的编号,注意,是每一类不是每一个。
      而像“D:\Skyfree_MassStorage\M\MCP55\nvata.inf”就是包含这个硬件ID的驱动INF所在的位置了。
      好的,按照微软的说法,只要我们在Sysprep.inf里写对了SysprepMassStorage段的列表(以下我们称为Device-InfPath列表),然后运行Sysprep.exe进行封装就可以了。这时,在运行Sysprep.exe封装时,Sysprep会根据MassStoragel列表的内容,逐一将磁盘控制器驱动文件复制到当前系统中,并创建相应的注册表项目。
      微软的这个方法具有绝对的权威性,以及相对较高的稳定性,不过读到这里您应该有很多疑问了,诸如Device-InfPath列表怎么生成等等,别着急,更详细的内容我会在下一章具体介绍。
 
级别: 管理员
发帖
27788
飞翔币
1567
威望
888
飞扬币
129750
信誉值
0

只看该作者 1 发表于: 2008-12-21
第二章、手动生成磁盘控制器驱动列表

      一、要有驱动
      简单不过的道理,如果我们要向当前系统里集成磁盘控制器驱动,那么我们就必须先得有磁盘控制器驱动。而这些驱动,从哪来,怎么收集?
      由于认识和习惯问题,很多情况下,磁盘控制器驱动并不是单列出来的。例如VIA K8T890主板,假设它是K8T890北桥+8237A南桥,关于K8T890的驱动包肯定不会单独告诉你哪一部分是8237A南桥磁盘控制器的驱动,而是告诉你整个驱动包就是关于K8T890主板的,甚至会告诉你这个驱动包是关于VIA主板全系列的。怎么办?
      其实也不用过于担心,很多主板驱动包中绝大多数部分都是关于磁盘控制器的,其他的部分基本都是关于系统总线等等系统设备的,所以就算是误集成了部分系统驱动,也不会有什么影响。这个我可以用一年的实践经验来保证。
      好,那现在要做的,就是去驱动之家(www.mydrivers.com)或者硬件厂商的官方网站去下载您需要的设备的驱动了。要注意的是,很多时候磁盘控制器与主板驱动是在同一个驱动包里的,所以下载时如果没有磁盘控制器驱动则可以只下载主板驱动。
      下载好之后,我们还有很多事情要做。
      很多驱动包提供给我们的是一个单个的安装包,用7z或类似软件将其强行解压缩,如果这个安装包有自解压的功能那么就让它自己释放,这样我们将获得一个包含着N个文件和N个文件夹的驱动文件夹。
      下面要做的事要很需要经验了,我们到这个驱动文件夹中,删除无用的文件(例如安装向导、图片文件等等),以及不适用于您系统的部分(例如您系统是XP,而驱动包里有关于2K3的部分)。我已经说了,这个很需要经验,所以不要指望自己可以一次就做的完美,这需要大量的驱动搜集实践经验,可能不是一时半会能掌握的,但是却无意中可以让您掌握另一门技术——驱动收集技术。
      如果您实在是对自己的驱动收集技术没信心,那么您可以用现成的收集好的驱动。向您推荐自由天空-自由的风驱动综合包系列和DPS驱动包系列。您可以从这两个驱动包中提取出已经收集好的主板驱动和磁盘控制器驱动,以备使用。

      二、要有耐心
      怎么忽然说耐心了?不说技术了么?不,耐心也是一种技术。随后我们要做一件可以测试我们的耐心程度的步骤——生成Device-InfPath列表。
      (以下内容均已XP为例)
      1、生成微软自带磁盘控制器驱动的Device-InfPath列表
      (1)在C盘创建Sysprep文件夹,不要怀疑,必须C盘,不要再为什么“软件都要放D盘” 的概念迷惑了;
      (2)将XP的“sysprep.exe”、“setupcl.exe”复制到C:\Sysprep中,“sysprep.exe”、“setupcl.exe”可以在XP原版光盘的Deploy.cab中获取;
      (3)在C:\Sysprep中创建Sysprep.inf文件,并写入“SysprepMassStorage”段的段名:[SysprepMassStorage];
      (4)在命令提示符下运行:
      C:\Sysprep\Sysprep.exe –bmsd
      这时,回看你的Sysprep.inf,你会惊奇的发现其中的[SysprepMassStorage]段下有:
      *pnp0a00=c:\windows\inf\machine.inf
      *pnp0a01=c:\windows\inf\machine.inf
      *pnp0a04=c:\windows\inf\machine.inf
      *pnp0a03=c:\windows\inf\machine.inf
      pci\cc_0604=c:\windows\inf\machine.inf
      pci\cc_0601=c:\windows\inf\machine.inf
      pci\cc_0602=c:\windows\inf\machine.inf
      pci\cc_0600=c:\windows\inf\machine.inf
      pci\cc_0500=c:\windows\inf\machine.inf
      root\ftdisk=c:\windows\inf\machine.inf
      root\swenum=c:\windows\inf\machine.inf
      root\update=c:\windows\inf\machine.inf
      root\mssmbios=c:\windows\inf\machine.inf
      root\dmio=c:\windows\inf\machine.inf
      ……      
      pcmcia\sony-memorystick(__8m)-9eb3=c:\windows\inf\mshdc.inf
      pcmcia\sony-memorystick(_16m)-d04d=c:\windows\inf\mshdc.inf
      pcmcia\sony-memorystick(_32m)-1766=c:\windows\inf\mshdc.inf
      pcmcia\sony-memorystick(_64m)-8c2c=c:\windows\inf\mshdc.inf
      pci\ven_1055&dev_9130=c:\windows\inf\mshdc.inf
      pcmcia\micron-mtcf____-392d=c:\windows\inf\mshdc.inf
      pci\ven_1179&dev_0105=c:\windows\inf\mshdc.inf
      这是一个相当长的(至少你现在认为是相当长的)Device-InfPath列表,这个列表中包含了系统自带的所有磁盘控制器驱动的硬件ID以及其驱动INF所在位置。
      这些硬件ID来源于系统的Machine.inf、Scsi.inf、Pnpscsi.inf 以及 Mshdc.inf,是正宗的系统自带驱动。这些驱动虽然不怎么新,但却是没法再稳定的驱动了。好了,现在随便找个其他地方把这个列表保存下来。
      不过这似乎不太需要什么耐心,而且好像没什么技术含量,哼哼,地狱还没到。
      2、生成第三方磁盘控制器驱动列表
      微软比较偏袒自家孩子,一个“C:\Sysprep\Sysprep.exe –bmsd”命令,所有系统自带的磁盘控制器驱动的Device-InfPath列表就自动生成了。而大量的第三方磁盘控制器驱动这些没人管的孩子,就得我们亲手来管一管了。
      下面我以集成我自己主板(NF550,芯片MCP55)的磁盘控制器驱动为例,讲述一下第三方磁盘控制器驱动Device-InfPath列表的生成方法。
      当然,首先我们还得按照刚才的方法创建Sysprep文件夹并将需要的文件复制进去,这些我就不再赘述。
      我们先到驱动之家下载一份MCP55的驱动,然后将里面我们需要的部分提取出来。我将这份MCP55的驱动放在了D:\Skyfree_MassStorage\M\MCP55,注意,驱动放在D盘是没问题的,因为所有的这些磁盘控制器驱动都会在封装阶段自动复制到C盘System32中。(本文的最后提供这个我提取的MCP55驱动包的下载,供大家参考和学习)
      整理好驱动之后,我们去哪找这个驱动里包含的硬件ID呢?没有好的方法,我们只能一个一个INF的看了。例如,我先打开了“nvata.inf”,阅读INF的全文,找到[NVIDIA]段,内容如下:
      [NVIDIA]
      %CK804SSS%=Crush11_Inst,PCI\VEN_10DE&DEV_0055&CC_0101
      %CK804SSS%=Crush11_Inst,PCI\VEN_10DE&DEV_0054&CC_0101
      %MCP51S%=Crush11_Inst,PCI\VEN_10DE&DEV_0267&CC_0101
      %MCP51S%=Crush11_Inst,PCI\VEN_10DE&DEV_0266&CC_0101
      %MCP55S%=Crush11_Inst,PCI\VEN_10DE&DEV_037F&CC_0101
      好的,这样我们就得到了5个硬件ID,那么我们在Sysprep.inf中的Device-InfPath列表就要这样写:
      [SysprepMassStorage]
      pci\ven_10de&dev_0055&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0054&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0267&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0266&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_037f&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      不过要注意的是,在Inf文件中搜索硬件ID也是个经验至上的工作,不是所有的Inf都写的很规范,所以我们要多多尝试。不要因为我上面的nVIDIA驱动ID是在[NVIDIA]段中找到的,那么在做Intel的时候也去找[Intel]段,这基本是不可取的,因为各个厂商写驱动Inf的习惯是不同的,而且哪怕是同一厂商,在不同时期写Inf的风格也会不同。
      好了,我们按照这个方法类推,一次搜索完毕了所有的MCP55下的Inf文件,得到了如下一个完整的MCP55芯片组第三方磁盘控制器驱动列表:
      [SysprepMassStorage]
      pci\ven_10de&dev_0055&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0054&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0267&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0266&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_037f&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
      pci\ven_10de&dev_0055&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_0054&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_0267&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_0266&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_037f&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      gennvraiddisk=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      *_nvraidbus=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf      
      *nvraidbus=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
      pci\ven_10de&dev_01b4=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_0064=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_00d4=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_0084=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_00e4=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_0052=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_0034=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_0264=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      pci\ven_10de&dev_0368=D:\Skyfree_MassStorage\M\MCP55\nvsmbus.inf
      这仅仅是一个nVIDIA芯片组中的MCP55芯片组,所以如果要收集大量的磁盘控制器驱动,工作量会十分十分的大,而且全部列表很可能有微软自带列表的5倍长。
      这是一个绝对的耐心活儿,所以,别不把耐心当技术。

      三、要有运气
      假定您现在已经收集好了一个2万行Device-InfPath列表,好吧,辛苦了。但是所有的事情到现在才刚刚开始,别晕,现在我们唯一要祈祷的是运气。
      由于诸多方面的原因,硬件ID有些时候也会有问题,同一厂商内部由于驱动更新、疏忽、兼容性问题,或不同厂商之间的误差,可能会造成如下的一些问题:
      (1)硬件ID冲突
      这个通常是由于统一厂商内驱动更新造成的,例如之前用了这个ID标示这类设备,后来改变了做法,新旧驱动之间部分ID不兼容。
      (2)硬件与当前系统不兼容
      这个基本是由于驱动更新较慢,或者厂商测试不够造成的。
      (3)硬件ID书写有误
      这个最无语,ATI就曾经把“0”写成“o”。
      这些问题不是我们能左右的,所以,还是最好强化一下近期的人品,避免遇到不可解释的非自然问题。
      出现上述问题时,表现为以下情况:
      (1)Sysprep在运行时忽然提示“某某注册表更新失败”或诸如此类的信息;
      (2)Sysprep的运行忽然停止响应(最好开个任务管理器在旁边监视)。
      出现问题后的解决方法:
      说实在的,这个比较困难,我也没有太好的方法。只能用最原始的排除法。将驱动列表拆分成两部分,分别测试,然后再拆分测试、再拆分测试、再拆分测试……直到找出问题所在。

      四、要有时间
      微软方法集成磁盘控制器驱动是个十分消耗时间的事情,每一次封装过程都要持续40~60分钟,所以,除非您有足够的时间和足够的兴趣以及足够的勇气,否则就不要尝试了。
级别: 管理员
发帖
27788
飞翔币
1567
威望
888
飞扬币
129750
信誉值
0

只看该作者 2 发表于: 2008-12-21
第三章、自动生成磁盘控制器驱动列表

      希望您不是按照第二章里的内容做完后才开始看第三章的,但是我强烈建议您仔细阅读并理解了第二章的内容后,并尝试了我在第二章中提供的那个MCP55的例子后再阅读本章内容,否则,您会缺失很多知识经验,以及对无数前辈努力的尊重。
      第二章中,我们运用“C:\Sysprep\Sysprep.exe –bmsd”命令自动生成了系统自带的磁盘控制器驱动列表,微软想办法用一个简便的命令把自己家孩子Machine.inf、Scsi.inf、Pnpscsi.inf 以及 Mshdc.inf的能力快速释放了出来,这个过程仅有短短的几秒,而我们要手工收集这些,就不是短短几分钟的问题了。
      好吧,现在有这样一个思路,如果我们能把第三方的驱动Inf文件伪装成微软家的孩子,再用“C:\Sysprep\Sysprep.exe –bmsd”命令是不是就可以实现自动生成Device-InfPath列表了?(注:这个思路最早不是来自我,而是出自自由天空一个坛友,但由于时间上的推移,我已经找不到这个坛友的名字了,请您在发现这篇文章后及时的联系SKY我,以致感谢!)
      经过多次尝试后,这个方法是可行的。Skyfree我用AU3写了一个程序,这个程序实现了如下算法:
      0、创建C:\Sysprep文件夹,复制所需文件进入,并写好一份包含[SysprepMassStorage]段的Sysprep.inf;
      1、指定一个存放所有驱动Inf和驱动文件的根文件夹,例如D:\Skyfree_MassStorage;
      2、遍历这个文件夹,搜索其中所有的Inf文件,并生成一份所有Inf文件位置的列表;
      3、将C:\Windows\Inf中的Machine.inf、Scsi.inf、Pnpscsi.inf 、Mshdc.inf备份;
      4、根据第三方Inf文件列表,将一个第三方的Inf文件例如nvata.inf复制到C:\Windows\Inf中,并改名为Machine.inf;
      5、运行“C:\Sysprep\Sysprep.exe –bmsd”,这时“C:\Sysprep\Sysprep.inf”中就会生成关于nvata.inf的Device-InfPath列表;
      6、将这个包含nvata.inf的Device-InfPath列表复制到其他位置保存;
      7、根据第三方的Inf文件列表,复制下一个第三方inf到C:\Windows\Inf中,进入下次循环;
      8、所有第三方Inf都已经生成Device-InfPath列表后将备份的Machine.inf、Scsi.inf、Pnpscsi.inf 、Mshdc.inf还原。
      “Creat_Device-InfPath_List.exe”我在本文最后提供下载。
级别: 管理员
发帖
27788
飞翔币
1567
威望
888
飞扬币
129750
信誉值
0

只看该作者 3 发表于: 2008-12-21
第四章、磁盘控制器驱动的集成与提取

      无论您使用的什么方法,现在应该已经有一份很长很长的Device-InfPath列表了。下面我们就要开始向系统中集成驱动了。
      复制需要的文件到C:\Sysprep文件夹,将Device-InfPath列表写入Sysprep.inf的[SysprepMassStorage]段下,双击Sysprep.exe开始系统封装。
      ……
      …………
      ………………
      怎么时间会这么长??是的,时间相当的长,Sysprep.exe正在很努力很努力的将我们Device-InfPath列表所列出的所有磁盘控制器设备集成进当前系统。根据您的Device-InfPath列表的长度,封装时间会有所变化。但是就算仅集成微软自带的磁盘控制器驱动,也大概需要15~20分钟。如果集成了大量的磁盘控制器驱动的话,这个时间可能会增至40~60分钟。这个时间长度是让人几乎无法接受的。
      那要怎么办才能加速这个过程呢?好吧,让我们来监控一下看看这个过程中什么被更改了。
      下载Total Uninstall:
http://www.duote.com/soft/5334.html
      这是一款监控安装程序对系统更改的软件,Total Uninstall的使用方法这里不再赘述,很简单的一个软件,自己多尝试。
      用Total Uninstall创建当前系统快照,再用Total Uninstall启动Sysprep.exe执行封装,封装技术后对比当前系统与之前的系统快照。
      现在要做下面的事情:
      0、创建以下文件夹:
      D:\Skyfree_MassStorage\System32
      D:\Skyfree_MassStorage\System32\drivers
      1、将监控到的C:\Windows\System32中的文件更改都提取出来,复制到D:\Skyfree_MassStorage\System32中;
      2、将监控到的C:\Windows\System32\drivers中的文件更改都提取出来,复制到D:\Skyfree_MassStorage\System32\drivers中;
      3、将监控到的“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”中的所有注册表更改到处,保存到D:\Skyfree_MassStorage\Service.reg;
      4、运行“RegEdit”,找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase”键,将其中所有内容导入,保存到D:\Skyfree_MassStorage\CDDB.reg;
      5、将C:\Sysprep\Sysprep.inf中的[sysprepcleanup]段内容复制出来,保存到D:\Skyfree_MassStorage\sysprepcleanup.inf。
      OK,所有提取的这些,就是神秘的所谓磁盘控制器驱动了!
      以后再进行系统封装时按照一下步骤做:
      1、处理系统,例如优化、精简、装软件,卸载驱动、处理HAL自动判定等;
      2、运行C:\Sysprep.exe封装系统;
      3、将D:\Skyfree_MassStorage\System32中所有文件复制覆盖C:\Windows\System32中所有文件;
      4、导入CDDB.reg和Service.reg;
      5、在C:\Sysprep\Sysprep.inf中创建[sysprepcleanup]段,将D:\Skyfree_MassStorage\sysprepcleanup.inf中的磁盘控制器清理列表复制到C:\Sysprep\Sysprep.inf的[sysprepcleanup]段中;
      6、在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce下创建SysClean键,键类型REG_SZ,内容“C:\Sysprep\Sysprep.exe -Clean”;
      7、重启备份系统。
级别: 管理员
发帖
27788
飞翔币
1567
威望
888
飞扬币
129750
信誉值
0

只看该作者 4 发表于: 2008-12-21
其他要注意的问题:

    1、搜集驱动前最好卸载所有当前硬件设备驱动,以免在监控搜集磁盘控制器驱动时形成干扰
    2、导入如下关于Intel部分的处理:
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IntelIde]
    "ErrorControl"=dword:00000001
    "Group"="System Bus Extender"
    "Start"=dword:00000000
    "Type"=dword:00000001
    "ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
      52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\
      00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\intelppm]
    "Type"=dword:00000001
    "Start"=dword:00000003
    "ErrorControl"=dword:00000001
    "ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
      52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,70,\
      00,70,00,6d,00,2e,00,73,00,79,00,73,00,00,00
    "DisplayName"="Intel Processor Driver"
    "Group"="Extended Base"
    可以避免Intel平台中封装的系统在AMD平台上蓝屏的问题
    3、提取的Service里关于Eventlog的部分,可以删除
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

只看该作者 5 发表于: 2023-04-02
进来看一看教程
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

只看该作者 6 发表于: 2023-04-02
不错 学习了  谢谢分享
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。