DDK中INF文件资料详解.docx

上传人:b****5 文档编号:5608374 上传时间:2022-12-29 格式:DOCX 页数:17 大小:25.20KB
下载 相关 举报
DDK中INF文件资料详解.docx_第1页
第1页 / 共17页
DDK中INF文件资料详解.docx_第2页
第2页 / 共17页
DDK中INF文件资料详解.docx_第3页
第3页 / 共17页
DDK中INF文件资料详解.docx_第4页
第4页 / 共17页
DDK中INF文件资料详解.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

DDK中INF文件资料详解.docx

《DDK中INF文件资料详解.docx》由会员分享,可在线阅读,更多相关《DDK中INF文件资料详解.docx(17页珍藏版)》请在冰豆网上搜索。

DDK中INF文件资料详解.docx

DDK中INF文件资料详解

安装一个驱动程序

一个后缀是INF的文本文件控制设备驱动程序自动的安装。

INF格式类似于WIN3.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文件的头和标识。

 

Entry

Value

Signature

“$WindowsNT$""$Windows95$""$Chicago$"的其中一个

Class

驱动程序的整个家族的类名﹒一些名字是预先确定的﹐例如﹐Net或者Display

ClassGuid

一个类的独一无二的GUID

Provider

INF文件提供者的名字

LayoutFile

只有在系统支持的INF文件中使用﹐OEM支持的INF文件用SourceDisksNames

和SourceDisksFiles代替

DriverVer

mm/dd/yyyy[,x,y,v,z],必须的条目﹐包含可选的版本信息

表15.1.[Version]部分的条目

Manufacturers部分

另一个必须的部分是[Manufacturers]﹐这个部分的条目列出了可以使用这个INF文件安装的设备和驱动程序﹐条目的形式是:

manufacturer=model

manufacturer列出被安装的硬件的制造商的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(HumanInputDevice)的USB键盘设备﹒compatible-id可以是任何表示用于任何的包含在列表中的相同安装脚本的数值﹒

DDInstall部分

它的名字独一无二的指定从[Models]部分列出的每个制造商的每个模型﹐

AddReg条目在语法上是必须的﹐CopyFiles条目对于[DDInstall]部分是重要的﹐它的形式是:

CopyFiles=file-list-section[,file-list-section...]或者

CopyFiles=@filename

前者是更普通的版本﹐它允许一个指向另一个包含一个安装文件列表的部分的指针﹒然而对于简单的驱动程序的安装﹐可以直接的使用文件名﹒ 

Entry

Value

DriverVer

mm/dd/yyyy[,x,y,v,z]﹐必须的条目﹐包含可选择的版本号码

CopyFiles

另一个指定需要复制的文件列表的部分或者一个单独的有”@”为前缀的文件名

AddReg

必须的﹐另一个包含需要的注册表信息的部分

Include

指向其它的INF文件名指针列表

Needs

Include条目的子集﹐列出了它的INF文件中需要的部分

DelFiles

指定另一个需要删除的文件列表的部分(一般是升级的目的)

RenFiles

指定另一个需要重命名的文件列表的部分(一般是存储安装之前的状态)

DelReg

指定另一个需要删除的系统注册表信息的部分

ProfileItems

指定另一个需要更改系统开始菜单的部分

表15.2.[DDInstall]部分条目

CopyFiles部分

INF文件的[CopyFiles]部分是唯一的名字并且CopyFiles的指示器在[DDInstall]部分﹐它的条目的形式是:

destination-filename[,source-filename,temp-filename,flag]

二进制值

符号名

描述

0x0400

COPYFLG_REPLACEONLY

如果已经有目标文件﹐则复制

0x0800

COPYFLG_NODECOMP

不解压﹐直接复制

0x0008

COPYFLG_FORCE_FILE_IN_USE

复制源文件为临时的名字﹐强制重新激活﹐

重命名临时文件

0x0010

COPYFLG_NO_OVERWRITE

不替换已存在的文件

0x1000

COPYFLG_REPLACE_BOOT_FILE

文件是系统加载的一部分﹐强制重新激活

0x2000

COPYFLG_NOPRUNE

强制复制﹐甚至安装者认为不需要

0x0020

COPYFLG_NO_VERSION_DIALOG

不重写更新的文件

0x0004

COPYFLG_NOVERSIONCHECK

总是重写目标文件

0x0040

COPYFLG_OVERWRITE_

OLDER_ONLY

重写老的目标文件

0x0001

COPYFLG_WARN_IF_SKIP

如果用户跳过文件﹐则警告

0x0002

COPYFLG_NOSKIP

不允许用户跳过文件

表15.3.CopyFilesflag的定义

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根键的子键﹒

缩写

意义

HKCR

HKEY_CLASSES_ROOT

HKCU

HKEY_CURRENT_USER

HKLM

HKEY_LOCAL_MACHINE

HKU

HKEY_USERS

HKR

设备安装的硬件子键

表15.4.AddRegreg-root缩写的意义

value-name指定被添加或者修改注册表值﹒每个系统注册表键包含零个或者多个不同数据类型的值﹒注册表编辑器在右边的窗格列出了子键的值﹒值的名字和值的数据也一起显示出来﹒左边的窗格仅仅显示子键﹒flags指定数据的类型﹒

二进制值

符号

意义

0x00000

FLG_ADDREG_TYPE_SZ

以零为结束的字符串

0x00001

FLG_ADDREG_BINVALUETYPE

二进制数据

0x00002

FLG_ADDREG_NOCLOBBER

不替换现有的值

0x00004

FLG_ADDREG_DELVALUE

删除子键或者值的名字

0x00010

FLG_ADDREG_KEYONLY

创建子键﹐不顾值

0x00020

FLG_ADDREG_OVERWRITEONLY

如果值存在﹐替换它﹐否则什幺也不作

0x10000

FLG_ADDREG_TYPE_MULTI_SZ

REG_MULTI_SZ值(数组)

0x00008

FLG_ADDREG_APPEND

附加到存在的REG_MULTI_SZ数组

0x20000

FLG_ADDREG_TYPE_EXPAND_SZ

REG_EXPAND_SZ数据

0x10001

FLG_ADDREG_TYPE_DWORD

DWORD值

0x20001

FLG_ADDREG_TYPE_NONE

REG_NONE值

表15.5.AddRegflags定义

系统注册表对于驱动程序安装的重要性将在后面讨论﹒

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联合使用﹒

意义

12

%windir%\system32\drivers对于Windows2000

%windir%\system\IoSubsys对于Windows98

10

%windir%

11

%windir%\system32对于Windows2000﹐

%windir%\system对于Windows98

30

根驱动器的根路径

54

Windows2000的根路径

01

这个INF文件的路径

17

INF文件的路径

20

Fonts的路径

51

假脱机的路径

52

假脱机的驱动程序路径

55

打印机处理机路径

23

Color(ICM)

-1

绝对路径

21

Viewers路径

53

UserProfile路径

24

应用软件路径

25

共享路径

18

帮助路径

16406

AllUsers\StartMenu

16407

AllUsers\StartMenu\Programs

16408

AllUsers\StartMenu\Programs\Startup

16409

AllUsers\Desktop

16415

AllUsers\Favorites

16419

AllUsers\ApplicationData

16422

ProgramFiles

16427

ProgramFiles\Common

16429

AllUsers\Templates

16430

AllUsers\Documents

表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扩展名)

二进制值

符号名

意义

0x0002

ASSOCSERVICE

驱动程序是一个FDO﹐不是滤波驱动程序

0x0008

NOCLOBBER_DISPLAYNAME

不重写friendly名字

0x0100

NOCLOBBER_DESCRIPTION

不重写Description

0x0010

NOCLOBBER_STARTTYPE

不重写starttype

0x0020

NOCLOBBER_ERRORCONTROL

不重写错误控制

表15.7.AddServiceflags定义

service-install部分和可选的eventlog-install部分唤起附加的控制服务值条目的INF部分(例如﹐ServiceType和StartType)﹒

ServiceInstall部分

[ServiceInstall]部分﹐它的名字在DDInstall.Services部分的AddService条目中唯一指定﹐控制和安装驱动程序到服务控制管理器﹒

条目

DisplayName

驱动程序的Friendly名字﹐显示在设备管理器中

Description

简短的描述驱动程序或者服务的目的﹐显示在设备管理器中

ServiceType

驱动程序类型:

0x01-内核驱动程序﹐0x02-文件系统驱动程序

StartType

何时驱动程序加载:

0-引导时﹐1-系统开始时

2-系统开始后自动加载﹐3-需要时手动﹐4-禁止使用

ErrorControl

驱动程序加载时错误部署:

0-忽视所有错误﹐1-显示错误给用户﹐

2-使用最后的良好状态重新激活﹐忽视错误﹐

3-使用最后的良好状态重新激活﹐调试错误

ServiceBinary

驱动程序的全路径名﹐可能包含dirid值

表15.8.ServiceInstall部分条目

INF例子

前面介绍的INF文件好象非常复杂﹐这里使用一个例子说明它﹒在下面的例子中﹐INF控制一个由两个文件组成的驱动程序﹒Launcher.SYS被复制到系统的驱动程序路径﹐Launcher.HLP被复制到系统的帮助路径(例如﹐WINNT\System32\Drivers和WINNT\Help)﹒

[Version]

Signature="$WindowsNT$"

Class=Missiles

ClassGUID={C9B3D080-6889-11d4-93FC-444553540000}Provider=W2KDriverBook

DriverVer=07/04/2000,1.00.2468.1

;注释在分号(;)后面

[DestinationDirs];指定文件复制的目的地

DefaultDestDir=12;%windir%\system32\drivers

CopyLaunchHelp=18;standardhelpdirectory

 

[Manufacturer]

W2KDriverBook=MyMfgName;唤起model部分

 

[MyMfgName];开始一个Models部分

"ISAMissileLauncher"=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="MissileLauncherDriverFiles";因为只有两个文件并且在同一个磁盘上

 

[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的SetupAPI库为新的设备提供一个类似的驱动程序列表﹒为了合适的驱动程序﹐系统使用新设备的class和model查找系统的INF目录(例如﹐WINNT\INF)﹒

       4.如果不能找到合适的INF文件﹐系统不进行进一步的动作直到一个有特权的用户进入系统﹒用户被提供一个新的硬件向导﹒用户提供驱动程序的位置和合适的INF文件位置﹒

       5.一旦找到INF文件﹐它被使用CfgMgrAPI库处理﹒驱动程序文件和注册表条目被安装和修改﹒内核模式的PnP管理器主要执行这个步骤﹒

        6.基于INF文件的指导﹐内核模式PnP管理器加载任何低层的滤波驱动程序﹐然后是functional驱动程序﹐最后是高层的驱动程序﹒在堆栈中的高层的驱动程序然后发送适当的PnP信息﹐包括IRP_MN_START_DEVICE.

添加/移除硬件向导

在安装过程中﹐主要的与用户的交互是添加新硬件向导﹒注意有一个制造商的列表(来自于INF文件的[Manufacturers]部分)﹐和Models列表(来自于INF文件的[Models]部分)﹒

通常﹐用户手动选择适当的驱动程序去安装和加载﹒如果驱动程序被安装﹐它的Dri

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1