DDK中INF文件详解
- 格式:doc
- 大小:147.50 KB
- 文档页数:11
分类号:B J82中国计算机报/2001年/11月/12日/第B09版/桌面社区I N F文件就是设备信息文件,在安装驱动程序时必不可少。
在W in98系统中利用I N F文件可以为我们使用和维护系统提供极大的方便,本文就介绍了W i n98系统中I N F文件的一些实用功能。
I N F文件的妙用河北 孟海江当我们在基于W i n98的系统中为计算机添加新硬件设备的时候,将设备与计算机进行正确的物理连接后,要使硬件设备发挥作用,必须要为该设备安装相应的驱动程序,这时我们可能就会接触I N F文件了。
I N F文件指的是设备信息文件。
在给指定的硬件设备安装驱动程序时,首先要找到该设备所对应的I N F文件,然后系统会根据I N F文件中包含的检测和安装设备的信息来决定设备使用的资源并为该设备安装相应的驱动程序。
当一个硬件制造商开发新产品时,必须要建立一个I N F文件来明确地定义各个级别的设备所需要的资源和文件。
虽然I N F文件最普遍的应用是为安装硬件设备的驱动程序服务的,但是在W i n98系统中I N F文件可以为我们使用和维护系统提供极大的方便。
下面就介绍一下I N F文件在这方面的应用。
W i n98的定制安装定制安装也称为无看守安装。
通常情况下安装W i n98系统需要守在计算机前进行系统安装的交互操作,如果你觉得这样既费时又枯燥,你可以利用W i n98安装光盘中提供的B a t c h工具制作一个自动安装W i n98的脚本,即生成一个包含安装W i n98时需要和安装向导进行交互的各种信息的I N F文件(通常文件名为M s b a t c h.i n f )。
利用该I N F文件,下次安装W i n98系统时,将该I N F文件作为W i n98安装命令的参数,你就可以让安装程序根据I N F文件包含的信息自动地对W i n98进行安装和配置。
因为利用B a t c h工具制作I N F文件时,所有的选项均是用户根据自己的需要进行填写或选择,故这种安装方法也称为定制安装。
Inf文件语法及书写规范Inf文件简介:INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。
如图1:运行inf文件的2种方法:GUI界面下右键点击inf文件>安装命令行下相关格式:RunDll setupx.dll,InstallHinfSection section reboot-mode inf-name命令行实例:rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1 (*.inf)其中,rundll程序以命令行的形式调用Windows的动态链接库,其命令格式为:{rundll.exe <DLL文件名>,<入口点>,<调用参数>setupx.dll是安装API(Setup API)函数库,包含了InstallHinfSection、SetupGetInfSections、SetupInstallFromInfSection、SetupPromptForDisk、SetupDiCreateDevRegKey等INF文件内部语法检查、节名搜索、注册键创建等功能函数。
setupx.dll与其后的入口点用逗号(,)分开,入口点是大小写敏感的。
Section是INF文件内初始执行节名,首先执行该节内容,默认情况下名称为“DefaultInstall”,系统用户一般不宜对此做任何改动,如被改动,则在后续INF文件的Install节使用相应修改后的名称。
reboot-mode是重启动参数,指示在INF文件执行后对系统的设置进行了改变,操作系统是否重新启动。
该参数一般设为132或4,即由安装程序决定是否必须重启动,因为某些设置的改变必须在重启动后才能生效。
inf-name是INF文件的名称,“%1”即为所选中文件本身。
如果问你什么是Inf文件?或许大家说不上什么,但是很多朋友在安装设备驱动程序时经常出现Inf文件。
其实Inf文件是微软为了方便硬件制作厂商发布设备驱动程序而创建的一种文件格式。
对于一般用户来说至多是了解一下,而很少加以研究应用。
那么Inf文件到底能不能为我们提供更多的应用是很多朋友非常关心的事情,带着这样的疑问我们深入研究了Inf文件,发现了很多实用的操作。
一、轻松鉴别硬件信息由于Inf文件是微软为了方便设备制作商发布驱动程序而创建的文件格式,因此我们可以从中查看其设备的类型。
图1就是一个典型的Inf文件内容,其中在“Version”段中的“Class”后面的字符表示的是设备类型,其中Media是指多媒体备,一般来说就是声卡。
如果后面的字符为Display(显卡)、Net(网卡)、Modem(调制解调器)、Printer(打印机)、Image(摄像头)等。
除此之外在“Manufacturer”字段中则说明了生产厂商,例如图1中所代表的声卡厂商就是C-Media。
另外从Inf文件名上也可以看出设备厂商或类型,例如笔者打开的图1文件名就是CM686,与声卡的型号相对类,而光驱的信息则是保存在cdrom.inf中,硬件信息是保存在disk.inf文件中的。
二、轻松安装Inf不同设备的驱动程序安装方法是不一样的,例如有一些驱动程序制作成了Setup.exe文件,我们只需要执行该文件即可安装。
而有一些驱动程序则是单独以Inf文件存在的,那么该如何呢?其实很简单,我们只需要在该文件上右击,在弹出的菜单中选择“安装”命令即可(如图2)。
三、完全卸载错误的驱动安装了错误的驱动程序设备无法发挥应用的功效,在这个时候正常的做法是卸载充备并重新正确的驱动。
但是在搜索新的驱动程序过程中,Windwos往往会自作主张的将未完全卸载的Inf 文件安装进来,从而导致正确的驱动程序无法安装。
IT八哥网()告诉大家真正卸载并彻底删除错误的驱动程序文件的方法。
INF文件详解INF文件格式要求一个INF文件是以段组织的简单的文本文件。
一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名。
每个段包含特定的条目和命名,这些命名用于引用INF文件其它地方定义的附加段。
INF文件的语法规则:1、要求的内容:在特定的INF文件中所要求的必选段和可选段、条目及命令依赖于所要安装的设备组件。
端点顺序可以是任意的,大多数的INF文件安装惯用的次序来安排各个段。
2、段名:INF文件的每个段从一个括在方括号[]中的段名开始。
段名可以由系统定义或INF编写者定义在Windows 2000中,段名的最大长度为255个字符。
在Windows 98中,段名不应该超过28个字符。
如果INF设计要在两个平台上运行,必须遵守最小的限制。
段名、条目和命令不分大小写。
在一个INF文件中如果有两个以上的段有相同的名字,系统将把其条目和命令合并成一个段。
每个段以另一个新段的开始或文件的结束为结束。
3、使用串标记:在INF文件中的许多值,包括INF编写者定义的段名都可以标示成%strkey%形式的标记。
每个这样的strkey必须在INF文件的Strings 段中定义为一系列显示可见字符组成的值。
4、行格式、续行及注释:段中的每个条目或命令以回车或换行符结束。
在条目或命令中,“\”可以没用做一个显示的续行符;分好“;”标示后面的内容是注释;可以用都好“,”分隔条目和命令中提供的多个值。
INF文件举例下面是一个完整的.inf文件,它是Windows 2000 DDK提供的USB批量阐述驱动程序范例中所附的.inf文件。
; Installation inf for the Intel 82930 USB Bulk IO Test Board;; (c) Copyright 1999 Microsoft;[Version]Signature="$CHICAGO$"Class=USBClassGUID={36FC9E60-C465-11CF-8056-444553540000}provider=%MSFT%DriverVer=08/05/1999[SourceDisksNames]1="BulkUsb Installation Disk",,,[SourceDisksFiles]BULKUSB.sys = 1BULKUSB.inf = 1[Manufacturer]%MfgName%=Microsoft[Microsoft]%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev,USB\VID_045E&PID_930A;[PreCopySection];HKR,,NoSetupUI,,1[DestinationDirs]BULKUSB.Files.Ext = 10,System32\DriversBULKUSB.Files.Inf = 10,INF[BULKUSB.Dev]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT.Services]Addservice = BULKUSB, 0x00000002, BULKUSB.AddService[BULKUSB.AddService]DisplayName = %BULKUSB.SvcDesc%ServiceType = 1 ; SERVICE_KERNEL_DRIVERStartType = 3 ; SERVICE_DEMAND_STARTErrorControl = 1 ; SERVICE_ERROR_NORMALServiceBinary = %10%\System32\Drivers\BULKUSB.sysLoadOrderGroup = Base[BULKUSB.AddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,BULKUSB.sysHKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","Maxi mumTransferSize",0x10001,4096HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","Debu gLevel",0x10001,2[BULKUSB.Files.Ext]BULKUSB.sys[BULKUSB.Files.Inf]BulkUsb.Inf;---------------------------------------------------------------;[Strings]MSFT="Microsoft"MfgName="Intel"USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"INF文件详解从上面完整的例子来看,可以对INF文件有的一个总体的印象,包括INF文件中包括的段,以及各段的书写格式。
安装一个驱动程序一个后缀是INF的文本文件控制设备驱动程序自动的安装。
INF格式类似于WIN 3.x下的老式的.INI文件,但是复杂些。
一个INF文件允许自动的或者在对话框的帮助下安装驱动程序文件。
驱动程序安装结束后对系统产生两个持久的影响:1. 描述驱动程序的系统注册表入口,它的加载顺序和任何适当的配置数据。
2. 驱动程序文件被拷贝到适当的系统路径。
INF文件是影响这些改变的标准的机制,它可以提供定制安装。
使用INF文件自动安装INF文件随着硬件和驱动程序一起提供,INF文件的结构和内容是驱动程序作者的责任。
INF文件结构INF文件是被分(section)成几个部分的文本文件,每个部分被指定一个标识符号﹐它被中括号([])括起来﹒一些部分的命名是必须的﹐而其它部分是驱动程序特定的﹒每个部分是一些安装动作﹐或者连接或者列举其它部分﹒文件中各个部分的顺序是不重要的﹐因为每个部分都是被命名和连接的﹒一个部分继续直到另一个部分或者遇到文件结束﹒每个部分的标识符号是独一无二的名字﹐为了保持与WIN98的兼容﹐它的长度被限制在28个字符之内﹐可以包含下划线和圆点字符﹐在引用整个名字的前提下﹐可以包含空格字符﹒文件内容的一般格式如下:entry = value [, value...]entry是指令﹐关键词或者文件名﹐value是entry被应用的属性﹒entry或者value名字可以指定为一个使用百分号(%)的代替一些具体数据的字符串﹐分割INF文件的[Strings]提供一个特殊语言ID的值。
Version 部分一个有效的INF文件从一个命名为[Version]的部分开始,它像一个INF文件的头和标识。
表15.1. [Version]部分的条目Manufacturers部分另一个必须的部分是[Manufacturers]﹐这个部分的条目列出了可以使用这个INF文件安装的设备和驱动程序﹐条目的形式是:manufacturer=modelmanufacturer列出被安装的硬件的制造商的INF文件的唯一名字﹒model提供指向INF 文件中另一个进一步安装这个模型的部分的指针﹐Models 部分罗列在[Manufacturers]部分的每一个模型﹐在文件中必须有相应的部分﹐model部分的每个条目的形式是:device-description=install-section-name,hw-id[,compatible-id...]device-description描述了设备模型的列表和一个短描述﹒这个字符串在安装的时候在对话框中提供给用户﹐因此它需要提供多种语言的文本﹒install-section-name的值参考[DDInstall]部分﹐也描述了INF文件的另一个进一步安装的部分﹒hw-id是硬件设备在PnP兼容的总线上声明的时候返回的PnP标识符号﹒例如﹐USB\VID_045E&PID_00B标识微软HID(Human Input Device)的USB键盘设备﹒compatible-id可以是任何表示用于任何的包含在列表中的相同安装脚本的数值﹒DDInstall 部分它的名字独一无二的指定从[Models]部分列出的每个制造商的每个模型﹐AddReg条目在语法上是必须的﹐CopyFiles条目对于[DDInstall]部分是重要的﹐它的形式是:CopyFiles=file-list-section[,file-list-section...] 或者CopyFiles=@filename前者是更普通的版本﹐它允许一个指向另一个包含一个安装文件列表的部分的指针﹒然而对于简单的驱动程序的安装﹐可以直接的使用文件名﹒表15.2. [DDInstall]部分条目CopyFiles部分INF文件的[CopyFiles]部分是唯一的名字并且CopyFiles的指示器在[DDInstall]部分﹐它的条目的形式是: destination-filename[,source-filename,temp-filename,flag]表15.3. CopyFiles flag的定义destination-filename是需要复制的文件名﹐如果与源文件名不同﹐source-filename 必须被指定﹐temp-filename在WIN98中是为新文件指定一个中间的文件名直到系统重新激活﹐对于WIN2000来说﹐它是无用的﹒flag值指定新的目标文件的部署﹒这些值可以OR起来使它有多个性质﹒应该确认没有互斥的项目﹒因为[CopyFiles]条目的语法不包含指定源文件的磁盘或者路径选项﹐所以﹐必须使用其它的INF文件的部分[SourceDisksNames]和[SourceDisksFiles]﹒[CopyFiles]是复制的源文件名﹐复制的目标则在[DestinationDirs]部分﹒AddReg部分INF文件的[AddReg]部分是唯一的名字﹐并且引用AddReg的指示器在[DDInstall]部分﹒这个部分的目的是提供在系统注册表中添加或者修改条目﹐形式是﹕reg-root[,subkey,value-name,flags,value]reg-root是注册表根的缩写﹐子键描述根键下的键名﹐使用反斜线字符(\)分开子键﹒例如﹐Software\W2KDriverBook\ Driver\Setting是有效的HKCU或者HKLM根键的子键﹒表15.4. AddReg reg-root缩写的意义value-name指定被添加或者修改注册表值﹒每个系统注册表键包含零个或者多个不同数据类型的值﹒注册表编辑器在右边的窗格列出了子键的值﹒值的名字和值的数据也一起显示出来﹒左边的窗格仅仅显示子键﹒flags指定数据的类型﹒表15.5. AddReg flags定义系统注册表对于驱动程序安装的重要性将在后面讨论﹒SourceDisksNames 部分如果INF文件包含的驱动程序文件分布在多个磁盘上﹐INF文件就必须包含[Source-DisksNames]部分﹐这个部分包含文件分布的每个磁盘的人口﹒diskid=disk-description[,tagfile,unused,path]diskid是唯一的分配设置中的名字﹒通常﹐磁盘号从1开始﹐disk-description是一个提示用户合适的磁盘的字符串﹒tagfile值有双重的作用﹒确定在安装过程中用户提供正确的磁盘﹐tagfile值在安装过程继续进行之前被检验﹐如果tagfile文件不存在﹐用户被重新提示插入正确的磁盘﹒如果agfile值包含.CAB的扩展名﹐表示磁盘上的驱动程序文件是压缩文件﹒path值是一个以root-relative为磁盘根目录的驱动程序文件的路径﹒像tagfile值一样是可选择的﹒SourceDisksFiles 部分INF文件必须包含一个[SourceDisksFiles]部分﹒这个部分列出了在安装驱动程序过程中使用的文件名﹒每个文件都有相应的条目﹒filename=diskid[,subdir,size]diskid值是一个[SourceDisksNames]部分指定的可以找到文件名的磁盘﹐可选的subdir值指定文件的路径﹒可选的size值指定解压缩文件的字节大小﹐安装过程使用这个数据在尝试复制文件之前决定目标系统是否适合安装﹒DestinationDirs部分这是个必须的提供目标路径的部分﹒file-list-section=dirid[,subdir] 或者DefaultDestDir=dirid[,subdir]file-list-section是一个被[CopyFiles]的指示器唤起的部分﹒它指定所有的被指示器复制的文件安装到指定的路径﹒对于DefaultDestDir﹐用于[CopyFiles]中所有的指示器﹐通常与file-list-section联合使用﹒表15.6. DestinationDirsdirid定义DDInstall.Services 部分为了让复制的文件在目标系统中起驱动程序的作用﹐必须通知服务控制管理器(SCM)﹐在WIN2000中安装的每个驱动程序在注册表的HKLM\System\CurrentControlSet\Services下面﹐ServiceType值是1表示内核模式的驱动程序﹒StartType指出在系统引导过程中在何时加载驱动程序﹒ErrorControl值决定在驱动程序加载的过程中如果遇到错误后如何是好﹒ServiceBinary值指出驱动程序的位置(.SYS文件)﹒但是可能会被遗漏﹐如果二进制文件在%windir%\system32\drivers路径并且与HKLM\...\Services下面的子键名的名字相同的时候就发生这种情况﹒DDInstall.Services部分条目的形式是﹕AddService=ServiceName,[flags],service-install-section[,eventlog-install-section]ServiceName描述服务的名字﹐典型的是驱动程序的名字(没有.SYS扩展名)表15.7. AddService flags定义service-install部分和可选的eventlog-install部分唤起附加的控制服务值条目的INF部分(例如﹐ServiceType和StartType)﹒ServiceInstall 部分[ServiceInstall]部分﹐它的名字在DDInstall.Services部分的AddService条目中唯一指定﹐控制和安装驱动程序到服务控制管理器﹒表15.8. ServiceInstall 部分条目INF 例子前面介绍的INF文件好象非常复杂﹐这里使用一个例子说明它﹒在下面的例子中﹐INF 控制一个由两个文件组成的驱动程序﹒Launcher.SYS被复制到系统的驱动程序路径﹐Launcher.HLP被复制到系统的帮助路径(例如﹐ WINNT\System32\Drivers和WINNT\Help)﹒[Version]Signature="$Windows NT$"Class=MissilesClassGUID={C9B3D080-6889-11d4-93FC-444553540000} Provider=W2KDriverBook DriverVer=07/04/2000,1.00.2468.1; 注释在分号(;)后面[DestinationDirs] ; 指定文件复制的目的地DefaultDestDir=12 ; %windir%\system32\drivers CopyLaunchHelp=18 ; standard help directory[Manufacturer]W2KDriverBook=MyMfgName ; 唤起model部分[MyMfgName] ; 开始一个Models部分"ISA Missile Launcher"=InstallLauncher,ISA\Launcher ; 我们的设备列表[InstallLauncher] ; 开始DDInstall 部分CopyFiles=CopyLaunchFiles ; 唤起CopyFiles 部分.CopyFiles=CopyLaunchHelp ; 另一个是help的AddReg=LaunchRegSection ; 唤起AddReg 部分[CopyLaunchFiles] ; 开始CopyFiles部分Launcher.sys[CopyLaunchHelp] ; Help文件的CopyFiles部分Launcher.hlp[LaunchRegSection] ; 开始AddReg 部分HKR,"Parameters","Coordinates",FLG_ADDREG_TYPE_DWORD,0; 给设备提供一个是0的DWORD 值[SourceDisksNames] ; 这个部分不是真的需要﹐1="Missile Launcher Driver Files" ; 因为只有两个文件并且在同一个磁盘上[SourceDisksFiles]Launcher.sys=1 ; 类似的﹐因为它们在同一个磁盘上﹐Launcher.hlp=1 ;所以不是真正的需要这个部分[InstallLauncher.Services] ; DDInstall.Services部分AddService=Launcher,2,LaunchService[LaunchService] ; 设置SCM﹐这样驱动程序就可以运行了ServiceType=1 ; 驱动程序StartType=3 ; 需要时手动加载ErrorControl=1 ; 汇报错误ServiceBinary=%12%\Launcher.sys ; 驱动程序路径使用INF文件一旦驱动程序的INF创建完成﹐必须处理它﹐使它有用﹒手动安装手动的处理INF文件﹐必须使用Windows的文件管理器选择INF文件﹐右击这个文件﹐选择安装﹒在真正的即插即用环境中﹐插入或者移除设备触发相应的驱动程序的安装﹐加载和卸载﹒因此﹐保留手动的安装是为了最初的测试和调试驱动程序﹒自动安装当一个即插即用的设备被插入到一个系统﹐数个子系统相互作用来加载新的驱动程序﹒1. 当设备被插入﹐硬件使用自动侦测和自动配置﹐告诉总线驱动程序设备出现﹒依赖于总线硬件﹐这可能涉及通知总线驱动程序一个新的总线设备列举发生﹒在这一步的最后﹐驱动程序发现新的设备出现并且有一个指定的设备ID﹒2. 内核模式PnP管理器通知用户模式PnP管理器一个新的有一个指定ID的设备出现在系统中﹒3. 用户模式PnP管理器使用WIN2000的Setup API库为新的设备提供一个类似的驱动程序列表﹒为了合适的驱动程序﹐系统使用新设备的class和model查找系统的INF目录(例如﹐WINNT\INF)﹒4. 如果不能找到合适的INF文件﹐系统不进行进一步的动作直到一个有特权的用户进入系统﹒用户被提供一个新的硬件向导﹒用户提供驱动程序的位置和合适的INF文件位置﹒5. 一旦找到INF文件﹐它被使用CfgMgr API库处理﹒驱动程序文件和注册表条目被安装和修改﹒内核模式的PnP管理器主要执行这个步骤﹒6. 基于INF文件的指导﹐内核模式PnP管理器加载任何低层的滤波驱动程序﹐然后是functional驱动程序﹐最后是高层的驱动程序﹒在堆栈中的高层的驱动程序然后发送适当的PnP信息﹐包括IRP_MN_START_DEVICE.添加/移除硬件向导在安装过程中﹐主要的与用户的交互是添加新硬件向导﹒注意有一个制造商的列表(来自于INF文件的[Manufacturers]部分)﹐和Models列表(来自于INF文件的[Models]部分)﹒通常﹐用户手动选择适当的驱动程序去安装和加载﹒如果驱动程序被安装﹐它的DriverEntry和AddDevice例程必须仍然有效﹐这样使请求驱动的硬件满意新代码的设置﹒换句话说﹐手动的选择可能成功的安装﹐但是初始化是失败的﹒Class名字和设备IDs即插即用设备自动安装的过程很大程度上依赖安装程序的定位合适驱动程序的INF文件和文件中各个部分的能力﹒这个部分文章的目的是解释Class名字和设备Ids﹐还有定位INF 文件的过程﹒每个即插即用设备应该有一个唯一的指定硬件模型的标识符号﹒因此提供设备ID给即插即用总线硬件和总线驱动程序﹒当然﹐总线驱动程序在新的设备被插入后的很短时间内请求设备ID﹒设备ID的形式与总线类型有关﹒但是﹐一般看起来是:<enumerator>\<enumerator-specific-device-ID>(例如﹐PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02)对于驱动程序代码﹐一个硬件设备可能汇报多个设备ID﹐它是设备功能上的与很多models兼容的陈述﹒因为INF文件的[Models]部分包含一个hw-id值﹐所以﹐寻找与新安装的设备返回的设备ID相匹配的INF文件中的条目非常简单﹒同样的INF条目允许相兼容硬件的列表的规范有附加的设备Ids形式﹒如果设备ID不能在INF文件中定位精确的匹配﹐就使用兼容的ID﹒另一个为设备定位合适的驱动程序的关键元素是安装类(Setup Class)的观念﹒一系列相关的设备可以共享分层的驱动程序 (例如﹐upper或者lower滤波器)﹐甚至在堆栈中个别的驱动程序﹒安装类被GUID 和name唯一的标识﹒微软定义了一系列驱动程序类﹐新的类可能被定义新的硬件组﹒创建新的组之前﹐必须选择一个新的GUID和class名字﹒表15.9. 安装类: 名字和GUIDs自定义安装驱动程序一般提供两个定制驱动程序安装的信息﹒第一﹐提供一个自定义的安装程序代替新硬件安装程序﹐为了提供这个功能﹐自定义的安装程序需要使用SETUPAPI.DLL提供的例程﹒这个库中的每个函数的形式是SetupDiXxx﹒DDK提供使用这个库的详细资料﹒第二﹐驱动程序可以提供一个自定义的设置设备的向导页﹒在它的工作要完成之前﹐安装程序发送一个DIF_NEWDEVICEWIZARD_FINISHINSTALL请求来提供给驱动程序一个显示自定义页的机会﹒控制驱动程序的加载顺序有时﹐驱动程序的加载顺序是非常重要的﹒可能一个驱动程序依赖另一个驱动程序初始化完成﹒当有这样的依赖产生﹐服务控制管理器(the Service Control Manager)可以取得系统注册表中条目LoadOrderGroup和Dependencies﹐这些值可以在INF文件中的[ServiceInstall]部分指定﹒LoadOrderGroup是命名一个指定的驱动程序加载顺序组的一个号码﹐Dependencies指定在这个驱动程序加载成功之前必须加载的组﹒这样的相互依赖不是公共的﹐也不应该是公共的﹒在一个真正的以设备为中心的环境(支持即插即用)中﹐驱动程序应该使用尽量少的联系的顺序﹒另一方面﹐分层很多的驱动程序的执行需要这些规范是合理的﹒驱动程序的数字签名WIN2000的CD上附带有很多第三方的驱动程序﹒为了分享这些程序﹐需要几个条件﹒加之﹐无论何时尝试在WIN2000上安装一个驱动程序﹐都会收到一个陈述设备驱动程序没有数字签名并且它的确实性没有被微软检验的警告信息﹒下面介绍微软的检验驱动程序的确实性的作用和驱动程序作者和硬件制造商的保证它们的软件包被包含在未来的WIN2000 CD上的负担﹒实用标准文案微软检验驱动程序的原因微软检验驱动程序有两个目标:1. 通过方便的设备驱动程序的发售提供或者促进WIN2000和更多的硬件设备的协同工作能力﹒2. 确定设备驱动程序是稳定的和没有折中系统的完整性﹒因为设备驱动程序操作在内核模式﹐它们可以慢慢的或者很快的使系统崩溃﹒因为系统的不稳定性常常由内核自己引起﹒这样﹐微软为它的操作系统维持一个被鉴定的制造商和驱动程序的目的是明显的﹒当然﹐WIN2000和大多数的硬件的协同工作能力是一个强有力的买点﹒因此﹐微软常常与硬件制造商一起来确保及时地发布兼容的驱动程序﹒为了完成这两个目标﹐微软有专门的提供硬件和驱动程序证明的团队﹐Windows硬件质量实验室(WHQL)﹒数字签名作为WHQL程序的一部分﹐一个被检验过的驱动程序获得一个允许在WIN2000中安装驱动程序并且不会产生警告的数字签名﹒数字签名由几个部分组成:1. 一个被包含在分布式的驱动程序包的目录文件(.CAT)﹐它包含微软分配的数字签名﹒2. 一个在INF文件中[Versions]部分的涉及.CAT文件的条目﹒3. WIN2000的是或者否允许一个没有数字签名的驱动程序安装的策略﹒数字签名有更改检验﹐这样确保驱动程序被使用供货商提供的原始的代码安装﹒它使用密码技术来完成这个目标﹐这个数字签名没有更改驱动程序代码﹒小结Windows 2000和Windows 98的自动的设备驱动程序的安装对于用户来说是一个巨大的进步﹒然而这个步骤需要驱动程序的作者附加的工作﹐至少﹐必须提供一个INF文件﹒文档。
inf逻辑磁盘标识【实用版】目录1.介绍 INF 文件2.INF 逻辑磁盘标识的作用3.INF 文件的结构4.磁盘标识的获取与使用5.INF 文件的编写示例正文1.介绍 INF 文件INF(Installation)文件是一种 Windows 操作系统下的安装文件格式,主要用于安装驱动程序和软件。
INF 文件包含了安装过程中所需的所有信息,如文件名、版本、目标安装路径等。
它相当于一个安装向导,可以引导安装程序完成安装任务。
2.INF 逻辑磁盘标识的作用INF 逻辑磁盘标识是 INF 文件中一个重要的部分,用于指示安装程序将文件安装到哪个磁盘分区。
磁盘标识可以帮助用户在安装过程中选择合适的目标分区,确保安装的文件不会覆盖现有分区的数据。
3.INF 文件的结构一个典型的 INF 文件结构如下:```[Installation]admin=1bisect=1boot=1蝴蝶=1buildver=0.1 buildtype=1 component=1 debuglevel=1 designation=1 description=1 device=1 devicedesc=1 deviceid=1 devicetype=1 driver=1 driverversion=1 dynamic=1 forceinstall=1 hash=1inf=1install=1 installer=1 installmode=1installtype=1item=1key=1language=1lifecycle=1 localization=1 machine=1 manufacturer=1model=1ame=1os=1osbuild=1package=1parent=1paths=1productid=1 productname=1 productversion=1 programminglanguage=1 publisher=1renderer=1resolution=1resourceonly=1safedllversion=1section=1security=1signing=1skuid=1source=1subcomponent=1subinstallation=1sysprep=1targetos=1transform=1uifile=1unicode=1version=1virtualdevice=1vision=1whql=1```其中,【Installation】段是 INF 文件的核心部分,包含了安装过程中所需的所有信息。
如何打开组策略编辑器?答:运行里输入gpedit.msc系统里提示没有打开组策略这条命令?答:1:看是不是注册表中锁住了组策略“HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer”,把“RestrictRun”的键值改为0即可。
2:开始--运行--MMC--文件--添加删除管理单元--添加--组策略--添加,后面的你应该会了。
看你要开哪个策略,就添加哪个策略。
组策略恢复办法!删除c:\windows\system32\GroupPolicy文件夹然后运行gpupdate /force 组策略恢复正常!还有很多朋友问是如何把组策略提取出来的其实很简单。
组策略设置完了都会保存到c:\windows\system32\GroupPolicy里只要第一次修改好了组策略然后把c:\windows\system32\GroupPolicy复制出来保存起来下次再做母盘的时候再复制进c:\windows\system32\里就可以了。
!这样更改组策略,有点麻烦,大家还可以试着更改注册表的方法更简单,下次试验下:》[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa] "forceguest"=dword:00000001 (仅来宾)[HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/WINDO WSNT/CURRENTVERSION/WINLOGON/SPECIALACCOUNTS/USERL IST]"ADMIN$"=dword:00000000sedenyinteractivelogonright 拒绝从本地登陆sedenynetworklogonright 拒绝从网络访问这台计算机sedenyservicelogonright 拒绝作为服务登陆sedenybatchlogonright 拒绝作为批处理作业登陆seinteractivelogonright 在本地登陆senetworklogonright 从网络访问此计算机seservicelogonright 作为服务登陆sebatchlogonright 作为批处理作业登陆在C:\>提示符下,键入secedit /export /cfg c:\sectmp.inf,导出它的当前安全设置。
INF文件详解INF文件格式要求一个INF文件是以段组织的简单的文本文件。
一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名。
每个段包含特定的条目和命名,这些命名用于引用INF文件其它地方定义的附加段。
INF文件的语法规则:1、要求的内容:在特定的INF文件中所要求的必选段和可选段、条目及命令依赖于所要安装的设备组件。
端点顺序可以是任意的,大多数的INF文件安装惯用的次序来安排各个段。
2、段名:INF文件的每个段从一个括在方括号[]中的段名开始。
段名可以由系统定义或INF编写者定义在Windows 2000中,段名的最大长度为255个字符。
在Windows 98中,段名不应该超过28个字符。
如果INF设计要在两个平台上运行,必须遵守最小的限制。
段名、条目和命令不分大小写。
在一个INF 文件中如果有两个以上的段有相同的名字,系统将把其条目和命令合并成一个段。
每个段以另一个新段的开始或文件的结束为结束。
3、使用串标记:在INF文件中的许多值,包括INF编写者定义的段名都可以标示成%strkey%形式的标记。
每个这样的strkey必须在INF文件的Strings段中定义为一系列显示可见字符组成的值。
4、行格式、续行及注释:段中的每个条目或命令以回车或换行符结束。
在条目或命令中,“\”可以没用做一个显示的续行符;分好“;”标示后面的内容是注释;可以用都好“,”分隔条目和命令中提供的多个值。
INF文件举例下面是一个完整的.inf文件,它是Windows 2000 DDK提供的USB批量阐述驱动程序范例中所附的.inf 文件。
; Installation inf for the Intel 82930 USB Bulk IO Test Board;; (c) Copyright 1999 Microsoft;[Version]Signature="$CHICAGO$"Class=USBClassGUID={36FC9E60-C465-11CF-8056-444553540000}provider=%MSFT%DriverVer=08/05/1999[SourceDisksNames]1="BulkUsb Installation Disk",,,[SourceDisksFiles]BULKUSB.sys = 1BULKUSB.inf = 1[Manufacturer]%MfgName%=Microsoft[Microsoft]%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A;[PreCopySection];HKR,,NoSetupUI,,1[DestinationDirs]BULKUSB.Files.Ext = 10,System32\DriversBULKUSB.Files.Inf = 10,INF[BULKUSB.Dev]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT.Services]Addservice = BULKUSB, 0x00000002, BULKUSB.AddService[BULKUSB.AddService]DisplayName = %BULKUSB.SvcDesc%ServiceType = 1 ; SERVICE_KERNEL_DRIVERStartType = 3 ; SERVICE_DEMAND_STARTErrorControl = 1 ; SERVICE_ERROR_NORMALServiceBinary = %10%\System32\Drivers\BULKUSB.sysLoadOrderGroup = Base[BULKUSB.AddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,BULKUSB.sysHKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","MaximumTransferSize",0x10001,4096 HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","DebugLevel",0x10001,2[BULKUSB.Files.Ext]BULKUSB.sys[BULKUSB.Files.Inf]BulkUsb.Inf;---------------------------------------------------------------;[Strings]MSFT="Microsoft"MfgName="Intel"USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"INF文件详解从上面完整的例子来看,可以对INF文件有的一个总体的印象,包括INF文件中包括的段,以及各段的书写格式。
INF是Device Information File(设备信息文件)的简称,设备管理器通过读取相应的INF文件来安装驱动程序,其中记录了驱动程序安装的所有操作,包括复制文件到指定路径、添加或修改注册表、加载系统服务等,而实际的驱动程序则存放在sys、dll、vxd等文件中。
\subsubsection{INF文件的规则}\begin{description}\item [规则一:] INF 文件是分节的,每一个 INF 文件有许多的节组成,节名用方括号括起来。
这些节名有些是系统定义好的,有一些是用户自定义的。
每一个节名最长为255个字符(Windows 2000/XP/2003操作系统中)或28个字符(Windows 98操作系统中)。
节与节之间没有先后顺序的区别,另外,同一个INF文件中如果出现两个同样的节名,则系统会自动将这两个节名下面的条目合并到一起。
\item [规则二:]在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都是由形如“signature="$CHICAGO$"”的形式组成的。
如果每一个条目的等号后有多个值,则每一个值之间用“,”号分隔开。
\item [规则三:] INF 文件对大小写不敏感。
\item [规则四:] ";" 号后面的内容为注释。
\item [规则五:] 如果一个条目的内容过多,在一行无法书写完全,则用 $\slash$将一行内容书写为多行。
明白了INF文件的规则后,让我们一起来解剖INF文件的结构。
\end{description}\subsubsection{INF文件的构成}在C:Windows下有一个名为INF的隐藏文件夹,我们可以找到很多??.INF、??.pnf格式的文件,前者即所谓的设备信息文件,后者是预编译信息文件。
用记事本可以打开INF文件,其中记录了必要的硬件安装信息,包括设备类型、设备生产厂商名称、适用产品等信息,Windows可以据此自动安装驱动程序。
安装一个驱动程序一个后缀是INF的文本文件控制设备驱动程序自动的安装。
INF格式类似于WIN 下的老式的.INI文件,但是复杂些。
一个INF文件允许自动的或者在对话框的帮助下安装驱动程序文件。
驱动程序安装结束后对系统产生两个持久的影响:1. 描述驱动程序的系统注册表入口,它的加载顺序和任何适当的配置数据。
2. 驱动程序文件被拷贝到适当的系统路径。
INF文件是影响这些改变的标准的机制,它可以提供定制安装。
使用INF文件自动安装INF文件随着硬件和驱动程序一起提供,INF文件的结构和内容是驱动程序作者的责任。
INF文件结构INF文件是被分(section)成几个部分的文本文件,每个部分被指定一个标识符号﹐它被中括号([])括起来﹒一些部分的命名是必须的﹐而其它部分是驱动程序特定的﹒每个部分是一些安装动作﹐或者连接或者列举其它部分﹒文件中各个部分的顺序是不重要的﹐因为每个部分都是被命名和连接的﹒一个部分继续直到另一个部分或者遇到文件结束﹒每个部分的标识符号是独一无二的名字﹐为了保持与WIN98的兼容﹐它的长度被限制在28个字符之内﹐可以包含下划线和圆点字符﹐在引用整个名字的前提下﹐可以包含空格字符﹒文件内容的一般格式如下:entry = value [, value...]entry是指令﹐关键词或者文件名﹐value是entry被应用的属性﹒entry或者value名字可以指定为一个使用百分号(%)的代替一些具体数据的字符串﹐分割INF文件的[Strings]提供一个特殊语言ID的值。
Version 部分一个有效的INF文件从一个命名为[Version]的部分开始,它像一个INF文件的头和标识。
表. [Version]部分的条目Manufacturers部分另一个必须的部分是[Manufacturers]﹐这个部分的条目列出了可以使用这个INF文件安装的设备和驱动程序﹐条目的形式是:manufacturer=modelmanufacturer列出被安装的硬件的制造商的INF文件的唯一名字﹒model提供指向INF文件中另一个进一步安装这个模型的部分的指针﹐Models 部分罗列在[Manufacturers]部分的每一个模型﹐在文件中必须有相应的部分﹐model部分的每个条目的形式是:device-description=install-section-name,hw-id[,compatible-id...]device-description描述了设备模型的列表和一个短描述﹒这个字符串在安装的时候在对话框中提供给用户﹐因此它需要提供多种语言的文本﹒install-section-name的值参考[DDInstall]部分﹐也描述了INF文件的另一个进一步安装的部分﹒hw-id是硬件设备在PnP兼容的总线上声明的时候返回的PnP标识符号﹒例如﹐USB\VID_045E&PID_00B标识微软HID(Human Input Device)的USB键盘设备﹒compatible-id可以是任何表示用于任何的包含在列表中的相同安装脚本的数值﹒DDInstall 部分它的名字独一无二的指定从[Models]部分列出的每个制造商的每个模型﹐AddReg条目在语法上是必须的﹐CopyFiles条目对于[DDInstall]部分是重要的﹐它的形式是:CopyFiles=file-list-section[,file-list-section...] 或者CopyFiles=@filename前者是更普通的版本﹐它允许一个指向另一个包含一个安装文件列表的部分的指针﹒然而对于简单的驱动程序的安装﹐可以直接的使用文件名﹒表. [DDInstall]部分条目CopyFiles部分INF文件的[CopyFiles]部分是唯一的名字并且CopyFiles的指示器在[DDInstall]部分﹐它的条目的形式是: destination-filename[,source-filename,temp-filename,flag]表. CopyFiles flag的定义destination-filename是需要复制的文件名﹐如果与源文件名不同﹐source-filename必须被指定﹐temp-filename在WIN98中是为新文件指定一个中间的文件名直到系统重新激活﹐对于WIN2000来说﹐它是无用的﹒flag值指定新的目标文件的部署﹒这些值可以OR起来使它有多个性质﹒应该确认没有互斥的项目﹒因为[CopyFiles]条目的语法不包含指定源文件的磁盘或者路径选项﹐所以﹐必须使用其它的INF文件的部分[SourceDisksNames]和[SourceDisksFiles]﹒[CopyFiles]是复制的源文件名﹐复制的目标则在[DestinationDirs]部分﹒AddReg部分INF文件的[AddReg]部分是唯一的名字﹐并且引用AddReg的指示器在[DDInstall]部分﹒这个部分的目的是提供在系统注册表中添加或者修改条目﹐形式是﹕reg-root[,subkey,value-name,flags,value]reg-root是注册表根的缩写﹐子键描述根键下的键名﹐使用反斜线字符(\)分开子键﹒例如﹐Software\W2KDriverBook\ Driver\Setting是有效的HKCU或者HKLM根键的子键﹒表. AddReg reg-root缩写的意义value-name指定被添加或者修改注册表值﹒每个系统注册表键包含零个或者多个不同数据类型的值﹒注册表编辑器在右边的窗格列出了子键的值﹒值的名字和值的数据也一起显示出来﹒左边的窗格仅仅显示子键﹒flags指定数据的类型﹒表. AddReg flags定义系统注册表对于驱动程序安装的重要性将在后面讨论﹒SourceDisksNames 部分如果INF文件包含的驱动程序文件分布在多个磁盘上﹐INF文件就必须包含[Source-DisksNames]部分﹐这个部分包含文件分布的每个磁盘的人口﹒diskid=disk-description[,tagfile,unused,path]diskid是唯一的分配设置中的名字﹒通常﹐磁盘号从1开始﹐disk-description是一个提示用户合适的磁盘的字符串﹒tagfile值有双重的作用﹒确定在安装过程中用户提供正确的磁盘﹐tagfile值在安装过程继续进行之前被检验﹐如果tagfile文件不存在﹐用户被重新提示插入正确的磁盘﹒如果agfile 值包含.CAB的扩展名﹐表示磁盘上的驱动程序文件是压缩文件﹒path值是一个以root-relative为磁盘根目录的驱动程序文件的路径﹒像tagfile值一样是可选择的﹒SourceDisksFiles 部分INF文件必须包含一个[SourceDisksFiles]部分﹒这个部分列出了在安装驱动程序过程中使用的文件名﹒每个文件都有相应的条目﹒filename=diskid[,subdir,size]diskid值是一个[SourceDisksNames]部分指定的可以找到文件名的磁盘﹐可选的subdir值指定文件的路径﹒可选的size值指定解压缩文件的字节大小﹐安装过程使用这个数据在尝试复制文件之前决定目标系统是否适合安装﹒DestinationDirs部分这是个必须的提供目标路径的部分﹒file-list-section=dirid[,subdir] 或者DefaultDestDir=dirid[,subdir]file-list-section是一个被[CopyFiles]的指示器唤起的部分﹒它指定所有的被指示器复制的文件安装到指定的路径﹒对于DefaultDestDir﹐用于[CopyFiles]中所有的指示器﹐通常与表. DestinationDirsdirid定义部分为了让复制的文件在目标系统中起驱动程序的作用﹐必须通知服务控制管理器(SCM)﹐在WIN2000中安装的每个驱动程序在注册表的HKLM\System\CurrentControlSet\Services下面﹐ServiceType值是1表示内核模式的驱动程序﹒StartType指出在系统引导过程中在何时加载驱动程序﹒ErrorControl值决定在驱动程序加载的过程中如果遇到错误后如何是好﹒ServiceBinary值指出驱动程序的位置(.SYS文件)﹒但是可能会被遗漏﹐如果二进制文件在%windir%\system32\drivers路径并且与HKLM\...\Services下面的子键名的名字相同的时候就发生这种情况﹒部分条目的形式是﹕AddService=ServiceName,[flags],service-install-section[,eventlog-install-section]ServiceName描述服务的名字﹐典型的是驱动程序的名字(没有.SYS扩展名)表. AddService flags定义service-install部分和可选的eventlog-install部分唤起附加的控制服务值条目的INF部分(例如﹐ServiceType和StartType)﹒ServiceInstall 部分[ServiceInstall]部分﹐它的名字在部分的AddService条目中唯一指定﹐控制和安装驱动程序到服务控制管理器﹒表. ServiceInstall 部分条目INF 例子前面介绍的INF文件好象非常复杂﹐这里使用一个例子说明它﹒在下面的例子中﹐INF控制一个由两个文件组成的驱动程序﹒被复制到系统的驱动程序路径﹐被复制到系统的帮助路径(例如﹐WINNT\System32\Drivers和WINNT\Help)﹒[Version]Signature="$Windows NT$"Class=MissilesClassGUID={C9B3D080-6889-11d4-93FC-0000} Provider=W2KDriverBook DriverVer=07/04/2000,; 注释在分号(;)后面[DestinationDirs] ; 指定文件复制的目的地DefaultDestDir=12 ; %windir%\system32\driversCopyLaunchHelp=18 ; standard help directory[Manufacturer]W2KDriverBook=MyMfgName ; 唤起model部分[MyMfgName] ; 开始一个Models部分"ISA Missile Launcher"=InstallLauncher,ISA\Launcher ; 我们的设备列表[InstallLauncher] ; 开始DDInstall 部分CopyFiles=CopyLaunchFiles ; 唤起CopyFiles 部分.CopyFiles=CopyLaunchHelp ; 另一个是help的AddReg=LaunchRegSection ; 唤起AddReg 部分[CopyLaunchFiles] ; 开始CopyFiles部分[CopyLaunchHelp] ; Help文件的CopyFiles部分[LaunchRegSection] ; 开始AddReg 部分HKR,"Parameters","Coordinates",FLG_ADDREG_TYPE_DWORD,0; 给设备提供一个是0的DWORD值[SourceDisksNames] ; 这个部分不是真的需要﹐1="Missile Launcher Driver Files" ; 因为只有两个文件并且在同一个磁盘上[SourceDisksFiles]=1 ; 类似的﹐因为它们在同一个磁盘上﹐=1 ;所以不是真正的需要这个部分[] ; 部分AddService=Launcher,2,LaunchService[LaunchService] ; 设置SCM﹐这样驱动程序就可以运行了ServiceType=1 ; 驱动程序StartType=3 ; 需要时手动加载ErrorControl=1 ; 汇报错误ServiceBinary=%12%\ ; 驱动程序路径使用INF文件一旦驱动程序的INF创建完成﹐必须处理它﹐使它有用﹒手动安装手动的处理INF文件﹐必须使用Windows的文件管理器选择INF文件﹐右击这个文件﹐选择安装﹒在真正的即插即用环境中﹐插入或者移除设备触发相应的驱动程序的安装﹐加载和卸载﹒因此﹐保留手动的安装是为了最初的测试和调试驱动程序﹒自动安装当一个即插即用的设备被插入到一个系统﹐数个子系统相互作用来加载新的驱动程序﹒1. 当设备被插入﹐硬件使用自动侦测和自动配置﹐告诉总线驱动程序设备出现﹒依赖于总线硬件﹐这可能涉及通知总线驱动程序一个新的总线设备列举发生﹒在这一步的最后﹐驱动程序发现新的设备出现并且有一个指定的设备ID﹒2. 内核模式PnP管理器通知用户模式PnP管理器一个新的有一个指定ID的设备出现在系统中﹒3. 用户模式PnP管理器使用WIN2000的Setup API库为新的设备提供一个类似的驱动程序列表﹒为了合适的驱动程序﹐系统使用新设备的class和model查找系统的INF目录(例如﹐WINNT\INF)﹒4. 如果不能找到合适的INF文件﹐系统不进行进一步的动作直到一个有特权的用户进入系统﹒用户被提供一个新的硬件向导﹒用户提供驱动程序的位置和合适的INF文件位置﹒5. 一旦找到INF文件﹐它被使用CfgMgr API库处理﹒驱动程序文件和注册表条目被安装和修改﹒内核模式的PnP管理器主要执行这个步骤﹒6. 基于INF文件的指导﹐内核模式PnP管理器加载任何低层的滤波驱动程序﹐然后是functional驱动程序﹐最后是高层的驱动程序﹒在堆栈中的高层的驱动程序然后发送适当的PnP信息﹐包括IRP_MN_START_DEVICE.添加/移除硬件向导在安装过程中﹐主要的与用户的交互是添加新硬件向导﹒注意有一个制造商的列表(来自于INF文件的[Manufacturers]部分)﹐和Models列表(来自于INF文件的[Models]部分)﹒通常﹐用户手动选择适当的驱动程序去安装和加载﹒如果驱动程序被安装﹐它的DriverEntry和AddDevice例程必须仍然有效﹐这样使请求驱动的硬件满意新代码的设置﹒换句话说﹐手动的选择可能成功的安装﹐但是初始化是失败的﹒Class名字和设备IDs即插即用设备自动安装的过程很大程度上依赖安装程序的定位合适驱动程序的INF文件和文件中各个部分的能力﹒这个部分文章的目的是解释Class名字和设备Ids﹐还有定位INF 文件的过程﹒每个即插即用设备应该有一个唯一的指定硬件模型的标识符号﹒因此提供设备ID给即插即用总线硬件和总线驱动程序﹒当然﹐总线驱动程序在新的设备被插入后的很短时间内请求设备ID﹒设备ID的形式与总线类型有关﹒但是﹐一般看起来是:<enumerator>\<enumerator-specific-device-ID>(例如﹐PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02)对于驱动程序代码﹐一个硬件设备可能汇报多个设备ID﹐它是设备功能上的与很多models兼容的陈述﹒因为INF文件的[Models]部分包含一个hw-id值﹐所以﹐寻找与新安装的设备返回的设备ID相匹配的INF文件中的条目非常简单﹒同样的INF条目允许相兼容硬件的列表的规范有附加的设备Ids形式﹒如果设备ID不能在INF文件中定位精确的匹配﹐就使用兼容的ID﹒另一个为设备定位合适的驱动程序的关键元素是安装类(Setup Class)的观念﹒一系列相关的设备可以共享分层的驱动程序(例如﹐upper或者lower滤波器)﹐甚至在堆栈中个别的驱动程序﹒安装类被GUID 和name唯一的标识﹒微软定义了一系列驱动程序类﹐新的类可能被定义新的硬件组﹒创建新的组之前﹐必须选择一个新的GUID和class名字﹒表. 安装类: 名字和GUIDs自定义安装驱动程序一般提供两个定制驱动程序安装的信息﹒第一﹐提供一个自定义的安装程序代替新硬件安装程序﹐为了提供这个功能﹐自定义的安装程序需要使用提供的例程﹒这个库中的每个函数的形式是SetupDiXxx﹒DDK提供使用这个库的详细资料﹒第二﹐驱动程序可以提供一个自定义的设置设备的向导页﹒在它的工作要完成之前﹐安装程序发送一个DIF_NEWDEVICEWIZARD_FINISHINSTALL请求来提供给驱动程序一个显示自定义页的机会﹒控制驱动程序的加载顺序有时﹐驱动程序的加载顺序是非常重要的﹒可能一个驱动程序依赖另一个驱动程序初始化完成﹒当有这样的依赖产生﹐服务控制管理器(the Service Control Manager)可以取得系统注册表中条目LoadOrderGroup和Dependencies﹐这些值可以在INF文件中的[ServiceInstall]部分指定﹒LoadOrderGroup是命名一个指定的驱动程序加载顺序组的一个号码﹐Dependencies指定在这个驱动程序加载成功之前必须加载的组﹒这样的相互依赖不是公共的﹐也不应该是公共的﹒在一个真正的以设备为中心的环境(支持即插即用)中﹐驱动程序应该使用尽量少的联系的顺序﹒另一方面﹐分层很多的驱动程序的执行需要这些规范是合理的﹒驱动程序的数字签名WIN2000的CD上附带有很多第三方的驱动程序﹒为了分享这些程序﹐需要几个条件﹒加之﹐无论何时尝试在WIN2000上安装一个驱动程序﹐都会收到一个陈述设备驱动程序没有数字签名并且它的确实性没有被微软检验的警告信息﹒下面介绍微软的检验驱动程序的确实性的作用和驱动程序作者和硬件制造商的保证它们的软件包被包含在未来的WIN2000 CD上的负担﹒微软检验驱动程序的原因微软检验驱动程序有两个目标:1. 通过方便的设备驱动程序的发售提供或者促进WIN2000和更多的硬件设备的协同工作能力﹒2. 确定设备驱动程序是稳定的和没有折中系统的完整性﹒因为设备驱动程序操作在内核模式﹐它们可以慢慢的或者很快的使系统崩溃﹒因为系统的不稳定性常常由内核自己引起﹒这样﹐微软为它的操作系统维持一个被鉴定的制造商和驱动程序的目的是明显的﹒当然﹐WIN2000和大多数的硬件的协同工作能力是一个强有力的买点﹒因此﹐微软常常与硬件制造商一起来确保及时地发布兼容的驱动程序﹒为了完成这两个目标﹐微软有专门的提供硬件和驱动程序证明的团队﹐Windows硬件质量实验室(WHQL)﹒数字签名作为WHQL程序的一部分﹐一个被检验过的驱动程序获得一个允许在WIN2000中安装驱动程序并且不会产生警告的数字签名﹒数字签名由几个部分组成:1. 一个被包含在分布式的驱动程序包的目录文件(.CAT)﹐它包含微软分配的数字签名﹒2. 一个在INF文件中[Versions]部分的涉及.CAT文件的条目﹒3. WIN2000的是或者否允许一个没有数字签名的驱动程序安装的策略﹒数字签名有更改检验﹐这样确保驱动程序被使用供货商提供的原始的代码安装﹒它使用密码技术来完成这个目标﹐这个数字签名没有更改驱动程序代码﹒小结Windows 2000和Windows 98的自动的设备驱动程序的安装对于用户来说是一个巨大的进步﹒然而这个步骤需要驱动程序的作者附加的工作﹐至少﹐必须提供一个INF文件﹒。