封装志 第三章(系统封装)_第1页
封装志 第三章(系统封装)_第2页
封装志 第三章(系统封装)_第3页
封装志 第三章(系统封装)_第4页
封装志 第三章(系统封装)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 、磁盘控制器驱动5 N( a/ l# Q3 C- K z! ) N6 , i$ d- - i& k5 t. z* u& O3.1 磁盘控制器相关知识(1)磁盘控制器9 E4 7 b9 z) O6 P& r5 W磁盘控制器,顾名思义,是磁盘的控制设备。这里的磁盘是个广义的概念,泛指目前的机械硬盘、固态硬盘等各种存储体。“磁盘控制器”一词来源于微软官方文档中的“大容量磁盘控制器”,由于当今普通用户的磁盘容量都已达到TB级,故去掉“大容量”三个字以避免混淆。大多数人过于关注磁盘的类型,往往忽略了最重要的磁盘控制器。随着磁盘技术的发展,各种类型的磁盘琳琅满目,如IDE、SATA、SCSI、SA

2、S硬盘等等,加上新生代固态硬盘,可谓是种类繁多。但Windows操作系统真的关心磁盘类型吗?No,Windows操作系统只关心磁盘控制器的类型和磁盘控制器的工作模式!% 1 x! h9 l2 N. i8 , W0 s M0 D# J/ w T(2)磁盘控制器驱动驱动程序是硬件与系统之间的桥梁,系统通过驱动程序控制和管理硬件,并通过驱动程序发挥出硬件的最佳能力。而磁盘控制器驱动程序是系统与磁盘控制器之间的桥梁,系统通过磁盘控制器驱动管理磁盘控制器,又通过磁盘控制器管理磁盘。; h: ) H* o7 E; S0 这也就是为什么系统不关心磁盘类型的原因,系统只要能够通过驱动操作磁盘控制器,那么对硬盘

3、的管理完全由磁盘控制器承担。举例子说,就像我去图书馆借书,我只要告诉图书管理员我需要什么书,图书管理员就会帮我找到这本书,而我无需了解这本书存放在哪个书架、归在哪个分类里。这里的“我”相当于系统,“图书馆管理员”相当于磁盘控制器,而“图书馆”就是磁盘。虽然这不是个特别恰当的例子,但是基本与系统、磁盘控制器、磁盘之间的关系吻合。这里,我们必须还要明确,磁盘控制器驱动是针对磁盘控制器的,而不是针对磁盘的。尽管多年来我一直在努力纠正这个概念,但很多技术员仍将“SATA硬盘驱动”、“串口驱动”等名词挂在嘴上,误导了很多新手。那为什么有时系统会无法在SATA硬盘的计算机上部署呢?这是因为系统映像中没有包

4、含此目标计算机的磁盘控制器驱动,没有匹配的驱动则系统就无法管理磁盘控制器,从而无法执行对磁盘的管理,所以造成的系统部署失败。看到这里,请以后不要将“SATA硬盘驱动”挂在嘴边了,这会误导更多的新手。( _& p. ! F- k H. C(3)“两种”磁盘控制器驱动8 i- F/ W3 e, O4 E1 w, g$ p, n磁盘控制器驱动分为“两种”,一种是使系统可以正确识别磁盘控制器以部署系统的驱动,一种是让系统可以更好的控制与管理磁盘控制器的驱动。其实这“两种”驱动是同一类驱动,只不过是不同的工作时机、不同的工作模式罢了。通常前者被俗称为“SRS驱动”,而后者被称为“PNP(即插即用)驱动”

5、。前者属于系统关键设备驱动,让系统能够启动,以不至于宕机蓝屏;后者就像你的显卡与声卡驱动一样,为的是能够让硬件更好的发挥其性能。% T R2 h7 A4 Y q(4)磁盘控制器工作模式磁盘控制器工作模式一般有:IDE(PATA)、SATA、AHCI、RAID等,而磁盘控制器工作模式与磁盘类型是基本无关的。这也就是说,即使你是SATA的硬盘,而如果磁盘控制器开启的是IDE工作模式,那么系统也仅仅把你的SATA硬盘当做一个IDE硬盘来对待。+ g9 i6 P: % q$ r同一个磁盘控制器可能会存在多种工作模式,例如同时拥有PATA、AHCI和RAID工作模式,一般可以在CMOS中进行设置。而每种

6、工作模式下磁盘控制器的硬件ID又是不同的,也就是说虽然磁盘控制器还是这个磁盘控制器,但由于它工作模式的变更,它的硬件ID也随之变更,那么就需要为它重新安装磁盘控制器驱动。这样也从另外一个角度解释了为什么系统安装完毕后,如果更改磁盘控制器工作模式,会造成蓝屏的问题。例如安装系统时,磁盘控制器工作模式为SATA,系统为磁盘控制器安装的是SATA模式的驱动,而一旦磁盘控制器工作模式改为了AHCI,由于系统里针对磁盘控制器的驱动仍是SATA模式的,系统无法正常操作磁盘控制器,所以就出现蓝屏宕机的情况。# h, B7 S# m, o 7 ! e+ h; H. S3 M. F/ x6 v7 K U) P.

7、 (5)“SRS驱动”SRS驱动是对“封装专用磁盘控制器驱动”的简称,SRS驱动最早是指磁盘控制器SATA、RAID和SCSI工作模式的驱动,时过境迁,新的AHCI模式已出,SCSI模式已被SAS模式取代,但由于SRS驱动是我们长期以来的简称,很多情况下仍旧在使用,所以我们保留这个名词并继续使用。SRS驱动泛指用于拓展系统部署范围的磁盘控制器驱动,而由于这个驱动经常是在系统封装时导入的,所以也称为“封装专用磁盘控制器驱动”。所以如果您在本书中看到关于“SRS驱动”的说法,只要知道它代表的是什么就可以了,它本身的含义已经被大大的扩充了。(6)IDE硬盘也需要磁盘控制器驱动?9 W& W# p-

8、x( 这个问题本身就带有谬误,前文已述,磁盘控制器驱动针对的是磁盘控制器,而不是硬盘,所以无论硬盘如何,都是需要磁盘控制器驱动的。那为什么我们通常不太考虑磁盘控制器IDE工作模式时的驱动呢?这是因为Windows操作系统会自带大多数磁盘控制器IDE工作模式的驱动。 r9 f P$ e. Y另外一个层面上讲,如果把IDE硬盘接入到一个支持其他工作模式的磁盘控制器上,如RAID工作模式,由于IDE工作模式的磁盘控制器驱动无法驱动此RAID工作模式,从而系统无法识别此IDE硬盘。2 |3 s, f0 T0 H8 l* |* O(7)系统自带磁盘控制器驱动0 L6 f) b0 p$ CWindows

9、XP和Windows 7都自带了一定量的磁盘控制器驱动,都包括了其发行时常见的磁盘控制器的驱动。这些驱动中包括了最常见磁盘控制器IDE模式、SATA模式、AHCI模式的驱动,还包括部分RAID模式、SCSI模式和SAS模式的驱动。这也就是为什么一个系统映像不额外添加SRS驱动也能具有一定的系统部署范围的原因。9 ! V/ w) k5 X/ k但随着时间的推移,拿WinXP为例,2001年时其自带的磁盘驱动也几乎是无所不能的,但在2010年的今天,WinXP如果不额外集成SRS驱动几乎是寸步难行的。Win7也一样,虽然现在可以应付大多数磁盘控制器,但随着时间的推移也会和WinXP一样。所以,为系

10、统增补额外的SRS驱动是势在必行的。3.2 磁盘控制器驱动的工作流程! j$ p ?7 s q1 |2 ) a2 _这里的磁盘控制器驱动指的是SRS驱动,即用于拓展系统部署范围的磁盘控制器驱动。SRS驱动属于系统关键设备驱动,随系统启动而启动,属于不可或缺的驱动,如果没有这个驱动系统将无法控制磁盘控制器,从而无法操作磁盘,结果一般会造成系统宕机。那么SRS驱动的工作流程是怎么样的?一般而言分三步:第一步,系统启动时检测系统关键设备列表。# c! _* w9 1 g& A3 x关键设备数据库位于注册表的:HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCr

11、iticalDeviceDatabase Y D* 6 $ 4 f打开这个键,其下是以系统关键设备的HWID命名的各子键。每个子键一般包括ClassGUID和Service两个项,ClassGUID的值为此设备所属类,Service的值为此设备所依赖的系统服务。系统启动时,根据当前计算机磁盘控制器对应工作模式的HWID,去CriticalDeviceDatabase键下寻找是否有以其HWID命名的子键,如果有,则加载其Service键值规定的服务;如果没有,则蓝屏宕机。# t4 V M) u0 O; z- f第二步,使用磁盘控制器驱动服务。 T+ M ! e$ i I系统服务列表位于注册表的:

12、HKEY_LOCAL_MACHINESYSTEMControlSet001services) O5 1 ! % h I2 / Z% q$ e+ 打开这个键,其下包括了当前系统所有的系统服务。(1)中所要加载的服务也位于此键下。如果(1)中所需的服务存在于此,则使用此服务;而如果不存在,则蓝屏宕机。我们打开一个磁盘控制器驱动服务,这个服务包含了很多键值,其中需要着重关注的是ImagePath和Start两个键值,ImagePath规定了此服务所需的磁盘控制器驱动文件所在位置,而Start规定了此服务的启动方式。# 4 R K7 x M) ; d2 T: u; k9 K8 a N: $ T; V第

13、三步,加载磁盘控制器驱动文件。/ |( ) X! b* ?/ T1 z C7 磁盘控制器驱动文件一般位于C:WindowsSystem32drivers(假设C盘是系统盘),且一般以.sys为后缀名。在(2)中所使用的服务需要ImagePath所规定的磁盘控制器驱动文件才能运行,如果此驱动文件存在,则加载使用;而如果此驱动文件不存在,则蓝屏宕机。! P2 u+ M5 A# Z6 q7 U A( K我们根据上面的描述,总结出如下一个流程:系统关键设备-设备驱动服务-设备驱动文件8 H5 w2 n+ Z m1 |1 W B9 p5 P0 S% y; w(1)当前磁盘控制器对应工作模式的HWID如果

14、属于系统关键设备,则启用其对应的服务;而如果不属于系统关键设备,则蓝屏宕机。(2)被要求使用的驱动服务如果存在,则尝试加载驱动文件启动;如果不存在,则蓝屏宕机。(3)被要求加载的驱动文件如果存在,则加载并使用;如果不存在则蓝屏宕机。. B/ f K- 3 _0 S0 G0 J这是一条紧密的链条,任何一个环节出现问题,都会造成蓝屏宕机的后果。所以在处理SRS驱动时一定要小心谨慎。3.3 阅读磁盘控制器驱动的INF u5 r P7 N# e% i- i3 W7 L. U0 o. T驱动程序一般包括.sys和.inf文件,大部分包括数字签名.cat文件,有些还包括.dll、.exe等驱动应用程序。就

15、磁盘控制器文件来说,一般需要.sys和.inf文件即可使驱动正常运作。这里的.sys文件就是驱动文件本身,也是我们在3.2节中提到的最终需要加载的驱动,而.inf文件的作用则是告之系统如何使用这个驱动程序。1 S; A9 6 Y1 L H本节我们将一起阅读一下磁盘控制器驱动的.inf文件,加深对磁盘控制器驱动的理解,同时为我们下一步的制作SRS驱动作准备。建议新手在练手时选用Intel的磁盘控制器驱动,Intel的驱动写的比较工整条理,适合我们做为分析和练习的对象。, F C; q, k) O: G8 d( G) K本节我们将选用Intel Rapid Storage Technology D

16、river 9.5.0.1037版中的AHCI部分(iaAHCI.inf)作为实例进行讲解。虽然驱动inf包含了很多的内容,但是本节只着重讲解与SRS驱动相关的驱动inf内容,学习知识讲究把握重点,尽可能减少不相关知识的干扰。至于其他部分的内容,建议您多问问百度和谷歌,并自己体会一下。另外,由于inf的阅读方法未查阅到官方文档说明,除非是开发驱动的高级技术人员,一般人很难能完全讲清一个inf中每个段的作用。下文我要讲的内容是我个人根据长时间的实践与揣摩而总结出来的,其中难免会有个别错误,还请读者见谅。但我绝对能保证大方向的正确性,还请读者放心。- h: J+ B- 0 M; n(1)versi

17、on段Intel Rapid Storage Technology Driver 9.5.0.1037的version段如下:12 version3 CatalogFile=iaAHCI.cat4 Signature=$WINDOWS NT$5 Class=hdc6 ClassGuid =4D36E96A-E325-11CE-BFC1-08002BE103187 Provider=%INTEL%8 DriverVer=10/02/2009,9.5.0.1037复制代码3 T5 _( n2 ?9 : % X/ Yversion段的作用一般是介绍本驱动的相关信息:: H! J Z1 / / H1

18、WCatalogFile:驱动认证文件的文件名。; K a: b( w4 oSignature:签名。Class:此驱动(或使用本驱动的硬件)所属分类,一般磁盘控制器驱动都属于hdc类或SCSIAdapter类。ClassGuid:所属类的Guid,可以理解为Class所对应的数字编号。% p3 E% W( _6 y8 eProvider:驱动提供者。在inf文件中,凡是以“%”开头或结尾的字符串,在inf文件末的string段中都有其对应的值。如%INTEL%的对应值是“Intel”。DriverVer:驱动生成时间以及驱动版本。特别注意Class、ClassGuid和DriverVer,搞

19、清楚它们可以避免不必要的麻烦。另外,确定本驱动可以用于源计算机的系统环境,WinXP用WinXP的驱动,Win7用Win7的驱动,一般不可混用。 3 6 # h S2 q$ j# (2)Manufacturer段& + G9 P* % 7 E* C( ?3 Intel Rapid Storage Technology Driver 9.5.0.1037的Manufacturer段如下:) l8 p9 b5 R4 Y! |% p/ M9 Manufacturer10 %INTEL%=INTEL_HDC,ntx86复制代码意思是:名为%INTEL%(在此是Intel)的制造商使用了本inf的“IN

20、TEL_HDC,ntx86”段。“INTEL_HDC,ntx86”信息本身也包含多个意思:第一个字符串,即第一个“,”之前的那个字符串,为主段名,其他的为附段名。一个主段名后可以有多个附段名,附段名间用英文逗号隔开。主段名可以单独使用,也可以与任何一个附段名结合使用,如本例“INTEL_HDC,ntx86”中,“INTEL_HDC”可以独立成为段名,也可以与附段名结合组成“INTEL_HDC.ntx86”来使用。$ P5 y. L- ( P( S. 再举个nVIDIA的例子,“%NVIDIA%=NVIDIA, ntx86, ntx86.6.0”,其中主段名为“NVIDIA”,附段名为“ntx8

21、6”和“ntx86.6.0”,可以使用的段名有“NVIDIA”、“NVIDIA. ntx86”、“NVIDIA.ntx86.6.0”。( f8 _. y7 m, i. v. Z1 w回到Intel的inf。通过对上文的阅读和理解,Intel Rapid Storage Technology Driver Manufacturer段的意思为:“名为Intel的制造商使用本inf的“INTEL_HDC”段和“INTEL_HDC. ntx86”段”。 X P4 y& _/ a1 |( l而后我们去查找这个两个段,发现只能找到“INTEL_HDC. ntx86”段,有时制造商为了方便拓展等理由会刻意这

22、样安排。那我们就来看看“INTEL_HDC. ntx86”段:- |; |+ m% g6 T( B$ j3 w 7 u1 x+ K9 b# Q1112 INTEL_HDC.ntx8613 %PCIVEN_8086&DEV_2681&CC_0106.DeviceDesc% = iaStor_Inst, PCIVEN_8086&DEV_2681&CC_010614 %PCIVEN_8086&DEV_27C1&CC_0106.DeviceDesc% = iaStor_Inst,PCIVEN_8086&DEV_27C1&CC_010615 %PCIVEN_8086&DEV_27C5&CC_0106.D

23、eviceDesc% = iaStor_mobl_Inst,PCIVEN_8086&DEV_27C5&CC_010616 %PCIVEN_8086&DEV_2821&CC_0106.DeviceDesc% = iaStor_Inst, PCIVEN_8086&DEV_2821&CC_010617 %PCIVEN_8086&DEV_2829&CC_0106.DeviceDesc% = iaStor_mobl_Inst, PCIVEN_8086&DEV_2829&CC_010618 %PCIVEN_8086&DEV_2922&CC_0106.DeviceDesc% = iaStor_Inst, P

24、CIVEN_8086&DEV_2922&CC_010619 %PCIVEN_8086&DEV_2929&CC_0106.DeviceDesc% = iaStor_mobl_Inst, PCIVEN_8086&DEV_2929&CC_010620 %PCIVEN_8086&DEV_3A02&CC_0106.DeviceDesc% = iaStor_Inst, PCIVEN_8086&DEV_3A02&CC_010621 %PCIVEN_8086&DEV_3A22&CC_0106.DeviceDesc% = iaStor_Inst, PCIVEN_8086&DEV_3A22&CC_010622 %

25、PCIVEN_8086&DEV_3B29&CC_0106.DeviceDesc% = iaStor_mobl_Inst, PCIVEN_8086&DEV_3B29&CC_010623 %PCIVEN_8086&DEV_3B2F&CC_0106.DeviceDesc% = iaStor_mobl_Inst, PCIVEN_8086&DEV_3B2F&CC_010624 %PCIVEN_8086&DEV_3B22&CC_0106.DeviceDesc% = iaStor_Inst, PCIVEN_8086&DEV_3B22&CC_0106复制代码7 f7 k* e# Q# S. H0 X X& N

26、对HWID熟悉的朋友一眼就能看出来这里肯定和HWID有关,没错,的确与HWID有很大关系。这个段就是用来规定具有哪些HWID的硬件可以使用本驱动,或者说本驱动支持哪些HWID的硬件。我们抽出其中部分来讲解,如: r( R/ X$ c0 a! + a%PCIVEN_8086&DEV_2681&CC_0106.DeviceDesc% = iaStor_Inst, PCIVEN_8086&DEV_2681&CC_0106“=”前的部分:对使用本HWID硬件的描述,具体描述见String段PCIVEN_8086&DEV_2681&CC_0106.DeviceDesc项的值。“=”后,“,”前的部分:使

27、用本驱动的硬件,要安装哪个段来执行驱动安装操作,这里是“iaStor_Inst”段。8 F6 d5 O! L 7 - k“=”后,“,”后的部分:可以使用本驱动的硬件的HWID,这里是“PCIVEN_8086&DEV_2681&CC_0106”。(3)服务段8 p+ ) r. T7 M) _! i5 在(2)中我们已经找到了,如果要安装HWID为PCIVEN_8086&DEV_2681&CC_0106硬件的驱动程序,要根据“iaStor_Inst”段的信息。这里的“iaStor_Inst”段是广义的,不只包含“iaStor_Inst”,还包含其子段(或叫做“派生段”),我们找一下它的“iaSt

28、or_Inst.Services”子段:7 J! L6 3 s5 L3 w! e6 z8 g25 iaStor_Inst.Services26 AddService = iaStor, %SPSVCINST_ASSOCSERVICE%, iaStor_Service_Inst, iaStor_EventLog_Inst复制代码$ P# p, j- x+ v5 e) rAddService规定了要为此驱动安装哪个服务。$ P r3 v/ g$ O第一个参数:iaStor,为需安装服务的服务名。, r6 R1 w4 Y. g/ N; / f! E第三个参数:iaStor_Service_Inst,

29、为根据“iaStor_Service_Inst”段所规定的内容安装服务。我们再找到“iaStor_Service_Inst”段,看看这个驱动的服务要怎么安装。, z* U; o. b5 |4 1 D6 h27 iaStor_Service_Inst28 DisplayName = %*PNP0600.DeviceDesc%29 ServiceType = %SERVICE_KERNEL_DRIVER%30 StartType = %SERVICE_BOOT_START%31 ErrorControl = %SERVICE_ERROR_NORMAL%32 ServiceBinary = %12%

30、iaStor.sys33 LoadOrderGroup = SCSI Miniport34 AddReg = iaStor_parameters_AddReg复制代码/ P# Y* X! J& D7 y. IDisplayName:服务的显示名,这个与服务名不同,在服务名不变的前提下可以根据需要有多种显示名,显示名的具体内容查阅“string”段“*PNP0600.DeviceDesc”项的内容。2 : |- T; k2 ( O& j3 RServiceType:服务的类型,此处是“内核级驱动”,具体值见“string”段“SERVICE_KERNEL_DRIVER” 项的内容。- K3 L4

31、 W I2 d4 L3 StartType:服务的启动类型,此处是“在系统启动时即启动”,具体值见“string”段“SERVICE_BOOT_START” 项的内容。ErrorControl:错误类型,此处是“一般性报错”,具体值见“string”段“SERVICE_ERROR_NORMAL” 项的内容。7 G6 ?1 Q# G Q- $ eServiceBinary:驱动文件所在位置,“%12%”一般代表system32drivers目录,驱动文件完整路径为“system32driversiaStor.sys”。6 Q% 9 j$ a7 o; w7 N r C H4 XLoadOrderG

32、roup:服务所属的组,这里是“SCSI Miniport”。AddReg:额外需要添加的注册表项目,见“iaStor_parameters_AddReg”段的具体内容。到这里,这个inf就算基本读完了,我们来总结一下我们读到的:& w L. c2 E* q2 A$ C1 s7 Y(1)通过version段了解驱动的基本信息;(2)通过Manufacturer段找到包含HWID的段,在根据HWID的段找到配合此HWID的驱动所需要安装的驱动服务;) + V6 K+ S0 u4 u0 i6 D3 D# N$ h: O- u(3)找到需要安装的驱动服务,了解这个驱动的服务是怎么样的,特别是启动类型

33、和驱动文件所在位置。这也就完成了由inf文件中读到“系统关键设备-设备驱动服务-设备驱动文件”流程中各部分关键信息的目的。便于我们下一步制作SRS驱动。3.4 制作SRS驱动 D; X( z0 j2 W(1)系统关键设备部分关键设备数据库(CriticalDeviceDatabase,简称CDDB)存储在: V. W4 i! ?4 I, E6 p. N1 j; W2 w( aHKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabase! y3 p& u% _% U5 R w其下包含了所有系统关键设备的HWID,磁盘控制器的

34、HWID也属于此,所以需要将inf中的HWID及其相关信息写入此注册表项目下。CDDB下的注册表项目的一般形式为:7 D6 K) 6 K( G1 X0 e8 E- J1 2 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabase(硬件ID)3 ClassGUID=(类的GUID)4 Service=(服务名)复制代码# G) 9 _, & f( C硬件ID,读取自inf中Manufacturer段规定的段,如本例中是为INTEL_HDC.ntx86段。1 r0 M5 P6 h* N# ) G d类的GUID,读取自i

35、nf中version段的ClassGuid项。服务名,读取自inf中硬件ID对应项目的参数,如本例中读取自iaStor_Inst段的子段iaStor_Inst.Services中AddService项决定的服务名:iaStor。+ g+ S2 / A9 X S, C那么PCIVEN_8086&DEV_2681&CC_0106对应的CDDB段应该为:5 j* ! P! o# 4 w) Q5 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabase PCI#VEN_8086&DEV_2681&CC_01066 ClassG

36、UID=4D36E96A-E325-11CE-BFC1-08002BE103187 Service= iaStor 复制代码(注意,HWID在写入注册表时“PCI”后的“”改为“#”,以避免混淆)1 w2 8 U# N1 z) _! Y c4 D; c, f(2)驱动服务部分) 9 S% g( E1 5 l在3.3中已述,驱动服务是由驱动安装段的Services子段中AddService的第三个参数决定的,本例中由“iaStor_Service_Inst”段来完成。. k3 K+ 1 v& 我们把“iaStor_Service_Inst”段中由“%”包含的字符串根据“String”段的信息来替

37、换一下,得到:) s; H) _: y3 z5 j0 p/ , X2 a8 iaStor_Service_Inst9 DisplayName = Intel AHCI Controller10 ServiceType = 111 StartType = 012 ErrorControl = 113 ServiceBinary =system32driversiaStor.sys14 LoadOrderGroup = SCSI Miniport15 AddReg = iaStor_parameters_AddReg复制代码 r5 R1 o4 l# q将驱动inf的服务段转化为注册表时,有如下对应

38、关系:inf中的ServiceType项对应注册表中的Type项;inf中的StartType项对应注册表中的Start项; ) U/ z X5 I2 x8 t( $ U( binf中的ErrorControl项对应注册表中的ErrorControl项;3 t9 P5 d O; l9 7 B4 Ainf中的ServiceBinary项对应注册表中的ImagePath项;$ & t; ?1 * E. X! c o5 Cinf中的LoadOrderGroup项对应注册表中的Group项。 v0 N6 d: 6 g3 7 c1 U( j4 r; f说明:DisplayName,由于我们是在制作SRS

39、驱动,一般而言此值没有具体作用,所以无需转化;ServiceType、StartType、ErrorControl在注册表中为“REG_DWORD”类型,写入注册表时,如果其值为非二进制,则需要将其值转为二进制;7 e, E( |, O6 v UServiceBinary的注册表项目类型为“REG_EXPAND_SZ”,需要将它的字符串内容完全转化为二进制内容;AddReg段是个需要商榷的段,在有些磁盘控制器中这个不是必须的(如Intel),而有些磁盘控制器则是必须的(如nVIDIA),所以我们一般还需将AddReg所规定段的内容进行转化。/ t, d0 $ g j; B. R5 U+ u0

40、?& M0 Z; D- W C5 u+ w# y9 CSRS驱动服务部分一般形式为: l0 F6 8 h7 S P; c16 HKEY_LOCAL_MACHINESYSTEMControlSet001Services(服务名)17 ErrorControl=18 Group=19 Start=20 Type=21 ImagePath=复制代码0 C3 Z9 B: e) ?; 8 ( b L* I经过转化后,iaStor服务在注册表中的形式为:22 HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesiaStor23 ErrorControl=dword:2

41、4 Group=SCSI Miniport25 Start=dword:26 Type=dword:27 ImagePath=hex(2):73,00,79,00,73,00,74,00,65,00,6D,00,33,00,32,00,5C,00,64,00,72,00,69,00,76,00,65,00,72,00,73,00,5C,00,69,00,61,00,53,00,74,00,6F,00,72,00,2E,00,73,00,79,00,73,00,00,00复制代码(3)驱动服务的附加注册表项在(2)中已经说到了服务创建段中的AddReg项,例如AddReg =iaStor_par

42、ameters_AddReg。我们在inf中寻找AddReg所规定的段,即“iaStor_parameters_AddReg”。& Q! U2 A$ Z& h u: e) V一般来说,只有注册表附加项中的“Parameters”才是必要的添加项目。如: M$ ; g( x( j- v- U28 iaStor_parameters_AddReg29 HKR,Parameters,queuePriorityEnable,%REG_DWORD%,030 HKR,Parameters,BusType,0x,0x复制代码$ e8 2 M! D! t# $ v3 V4 M o第一个参数HKR:服务所在键。

43、3 ! w$ B) y2 l; 5 P; 第二个参数Parameters:服务所在键下的Parameters子键。7 g. G6 z# & m( q* q第三个参数,一般规定要建立名为什么的项,如这里的queuePriorityEnable项和BusType项。第四个参数,所创建项的类型,如果使用“%”包含则取string段寻找对应值。一般而言,0x是REG_EXPAND_SZ类型,0x是REG_DWORD类型。第五格参数,所创建项的值,请根据项的类型进行转化,如将十进制转化为二进制。8 P, / . o+ i* O& p* x* o. N( _; W将上述inf内容按照刚才所讲的规则进行转化

44、后为:31 HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesiaStorParameters32 queuePriorityEnable=dword:33 BusType=dword:复制代码(4)驱动文件折腾了这么多,别忘记了我们的主角驱动文件。将对应的驱动文件放置到ImagePath(inf中ServiceBinary)所规定的位置。在此例中,需要将iaStor.sys放置到System32drivers中(假设C盘是系统盘),完整路径为:C:WindowsSystem32driversiaStor.sys。- G) k# v& j& J, z2

45、r) q! I经过一番努力,我们完成了Intel Rapid Storage Technology 驱动的AHCI部分从一般驱动向SRS驱动的转化,转化为注册表文件后如下:2 ) & M. l7 D1 L; l34 Windows Registry Editor Version 5.003536 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_2681&CC_010637 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031838 Serv

46、ice=iaStor39 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_27C1&CC_010640 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031841 Service=iaStor42 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_27C5&CC_010643 ClassGUID=4D36E96A-E325-1

47、1CE-BFC1-08002BE1031844 Service=iaStor45 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_2821&CC_010646 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031847 Service=iaStor48 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_2829&CC_0106

48、49 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031850 Service=iaStor51 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_2922&CC_010652 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031853 Service=iaStor54 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_2929&CC_010655 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031856 Service=iaStor57 HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasePCI#VEN_8086&DEV_3A02&CC_010658 ClassGUID=4D36E96A-E325-11CE-BFC1-08002BE1031859 Service=iaStor60 HKEY_LOCAL_MACHI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论