当前位置: 代码迷 >> Web前端 >> INF资料编写说明
  详细解决方案

INF资料编写说明

热度:200   发布时间:2012-11-01 11:11:33.0
INF文件编写说明

???? 最近要在web中播放视频,但下端厂商不给提供CAB包,只提供一堆dll和ocx,无奈只有自己打了,难点在哪儿?编写INF文件上。摸爬滚打,找了一天,终于解决了,现在分享一篇INF文件介绍的文章。

?

原文地址:http://blog.csdn.net/shanhe/archive/2004/12/25/229368.aspx

?

?

INF文件必须包含以下规则:

?????? 节(Sections)开始于由中括号([])扩起来的节名

必须包含版本信息节以表明自己属于win95还是winnt4格式。

值(Value)由%strkey%替代的表达式字符串表达组成,strkey必须在strings节中定义。如果出现%,则用%%替代。

?

Setup程序使用以下各节:

[Version]??????? 必须包含在INF文件中,表明inf文件格式

[Version]

Signature="signature-name"

Class=class-name

ClassGUID=GUID

Provider=INF-creator

LayoutFile=filename.inf[,filename.inf]...

?

Signature-name

参数可以取值 $Windows NT$, $Chicago$, or $Windows 95$(引号括起来).如果不是以上这些字符串,则不被认可为inf文件。 (特别注意!)

Class-name

此参数用于安装设备驱动。详细信息见DDK Programmer's Guide.

GUID

此参数用于安装设备驱动。详细信息见DDK Programmer's Guide.

INF-creator

标示INF的创建者. 典型的情况,此值为inf文件的创建者所在组织

filename.inf

INF文件必须包含SourceDisksFiles 和 SourceDisksNames 节。这些文件的描述文件通常命名为 LAYOUT.INF. 如果文件名不是特别指定,SourceDisksNames 和 SourceDisksFiles 必须出现在当前inf文件中

以下为典型的例子:

[Version]

Signature="$Windows NT$"

Class=Mouse

ClassGUID={4D36E96F-E325-11CE-BFC1-08002BE10318}

Provider=%Provider%

LayoutFile=layout.inf

?

[Strings]

Provider="Corporation X"

?

[Install]?? 此节指定包含的安装指令节,每一个条目将会成为一节

????????????? [install-section-name]

LogConfig=log-config-section-name[,log-config-section-name]...

Copyfiles=file-list-section[,file-list-section]...

Renfiles=file-list-section[,file-list-section]...

Delfiles=file-list-section[,file-list-section]...

UpdateInis=update-ini-section[,update-ini-section]...

UpdateIniFields=update-inifields-section[,update-inifields-section]...

AddReg=add-registry-section[,add-registry-section]...

DelReg=del-registry-section[,del-registry-section]...

Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...

??????

????????????? 以上各条目并非全部必须。节名必须为可见字符。每个条目包含一到多个节。第一个命名之后的所有命名必须以,引导。条目指定了必须出现在INF文件中的各节。CopyFiles则可例外(如果没有任何文件被拷贝)。

如果安装驱动程序,仅仅使用LogConfig条目。详见DDK Programmer's Guide.

????????????? CopyFiles条目中可以包含特殊字符@ 以直接拷贝一个单一文件。文件将拷贝到DefaultDestDir, DestinationDirs节包含了DefaultDestDir的描述。如例子:

????????????? [MyInstall]

CopyFiles= @MyFile.exe

此文件将拷贝到缺省目标目录。

?

为适应不同平台,可以在install节后加上不同的后缀。可以出现defaultInstall.nt这样的节名。install-section-name可选的后缀:

Extension????????????????????????????????????? Platform

.Win?????????????????????????????????????????? Windows 95

.NT?????????????????????????????????????????? Windows NT (all platforms)

.NTx86??????????????????????????????????????? Windows NT (x86 only)

.NTMIPS????????????????????????????? Windows NT (MIPS only)

.NTAlpha??????????????????????????????????? Windows NT (Alpha only)

.NTPPC?????????????????????????????????????? Windows NT (PowerPC only)

?

以下例子展示了如何出现两个copyfiles节:

[Ser_Inst]

CopyFiles=Ser_CopyFiles, mouclass_CopyFiles

?

[Ser_CopyFiles]

sermouse.sys

?

[mouclass_CopyFiles]

mouclass.sys

?

?

?

?

?

?

[Add Registry]?????? 描述如何增加注册表项目。add-registry-section 节名必须处现在install节中的 AddReg 条目中。

????????????? [add-registry-section]

reg-root-string, [subkey], [value-name], [flags], [value]

[reg-root-string, [subkey], [value-name], [flags], [value]]

?????????????

????????????? reg-root-string 注册表的根名:

????????????? HKCR??????????????? HKEY_CLASSES_ROOT.

HKCU??????????????? HKEY_CURRENT_USER.

HKLM??????????????? HKEY_LOCAL_MACHINE.

HKU??????????????? HKEY_USERS.

HKR??????????????? 相关于 SetupInstallFromInfSection.节中指定的值

?

subkey

可选,例如 key1\key2\key3....

?

value-name

可选,标示subkey的值名称。对于字符串类型可以空,标示缺省字符串值

?

flag??????? 值类型的标示

Value???????????????????????????? Meaning

FLG_ADDREG_BINVALUETYPE? The value is "raw" data.

FLG_ADDREG_NOCLOBBER???????? 如果注册表中出现不要覆盖此值.

FLG_ADDREG_DELVAL?????????????????????? 从注册表中删除此键

FLG_ADDREG_APPEND?????????????????????? 追加一个值到已存值中,仅仅支持REG_MULTI_SZ 值

FLG_ADDREG_TYPE_MASK?????????????? Mask.

FLG_ADDREG_TYPE_SZ??????????????? REG_SZ类型

FLG_ADDREG_TYPE_MULTI_SZ? REG_MULTI_SZ.

FLG_ADDREG_TYPE_EXPAND_SZ REG_EXPAND_SZ.

FLG_ADDREG_TYPE_BINARY??? REG_BINARY.

FLG_ADDREG_TYPE_DWORD??? REG_DWORD.

FLG_ADDREG_TYPE_NONE?????????????? REG_NONE.

???????????????????? Windows 95 安装程序将视扩展数据类型为REG_SZ or REG_BINARY.

????????????????????

value

可选. 16进值或者字符串

??????

?

?

?

?

?

?

[CopyFiles]?????? 此类节可以有多个,定义于install节中。

???????????????????? [file-list-section]

destination-file-name[,source-file-name][,temporary-file-name][,flag]

[destination-file-name[,source-file-name][,temporary-file-name]][,flag]

.

???????????????????? destination-file-name

目标文件名,如果没有给出源文件名,那么此名也是源文件名.

source-file-name

源文件名,如果没有给出目标文件名,那么此名也是目标文件名.

temporary-file-name

被忽略,setup函数自动处理临时文件.

flag

可选,用于控制文件如何被拷贝。你必须配置实际值

COPYFLG_WARN_IF_SKIP (0x00000001)

如果用户试图在发生一个错误后跳过将显示警告信息

COPYFLG_NOSKIP (0x00000002)

不允许用户跳过拷贝此文件

COPYFLG_NOVERSIONCHECK (0x00000004)

如果文件存在于目标目录,忽略

COPYFLG_FORCE_FILE_IN_USE (0x00000008)

替换被使用得文件?,当拷贝时文件被使用

COPYFLG_NO_OVERWRITE (0x00000010)

不覆盖目标文件中已存文件

COPYFLG_NO_VERSION_DIALOG (0x00000020)

如果目标文件已存且新则不覆盖也不出现对话框

COPYFLG_REPLACEONLY (0x00000040)

替换目标文件

?

?

?

[delete Registry]?????? 描述如何增加注册表项目。del-registry-section 节名必须处现在install节中的 DelReg 条目中。

????????????? [del-registry-section]

reg-root-string, [subkey], [value-name], [flags], [value]

[reg-root-string, [subkey], [value-name], [flags], [value]]

?????????????

????????????? reg-root-string 注册表的根名:

????????????? HKCR??????????????? HKEY_CLASSES_ROOT.

HKCU??????????????? HKEY_CURRENT_USER.

HKLM??????????????? HKEY_LOCAL_MACHINE.

HKU??????????????? HKEY_USERS.

HKR??????????????? 相关于 SetupInstallFromInfSection.节中指定的值

?

subkey

?

value-name

可选,标示subkey的值名称。对于字符串类型可以空,标示缺省字符串值

?

?

[Delete Files]?????? 此节指定需要被删除的文件,节名必须出现在install中的delfiles条目中

????????????? [file-list-section]

file-name[,,,flag]

?????????????

????????????? flag

????????????? 可选。

DELFLG_IN_USE (0x00000001)

当因为文件正被使用,SetupCommitFileQueue 取消, 将排队在系统重新启动时候被删除。

如果不使用此值,则安装时候被使用的文件不会被delete files指定节删除

DELFLG_IN_USE1 (0x00010000)

高字节版本的DELFLG_IN_USE. Setting DELFLG_IN_USE1 差别在于同样可适用于Copyfiles节和delete Files节即使COPYFLG_WARN_IF_SKIP 标志被使用。

?

?

[INI File to Registry] 此节指示那些ini文件中的条目将对应到注册表。

???????????????????? [ini-to-registry-section]

ini-file, ini-section, [ini-key],reg-root-string,subkey[,flags]

?

ini-file

ini文件名.

ini-section

ini文件的节

ini-key

条目

flags

指示当注册表存在对应的注册表项目是否是否覆盖旧值。

Bit??????? value?

0??????? 0?????????????? 缺省,不删除ini文件项目,当ini转移到注册表后

0?????? 1?????????????? 删除ini文件中的项目,当ini转移到注册表后?

1??????? 0?????????????? 缺省,当注册表存在此子项,则不覆盖

1??????? 1?????????????? 覆盖

?

?

[Rename Files]????????????? 此类型节列出那些将样改名的文件。此节名必须出现在install节中

????????????? [rename-files-section-name]

new-file-name,old-file-name

?

new-file-name

新文件名

old-file-name

原来的文件名。此参数必须定义于 SourceDisksFiles 节中。

?

?

[Update INI Fields]??????????? 此节替换、增加、删除指定ini文件的条目。此节名必须存在于install节中。

????????????? [update-inifields-section-name]

ini-file,ini-section,profile-name,[old-field],[new-field],[flags]

????????????

????????????? 参数说明见上

?

?

[Update INI File]? 此节删除、替换或者新增INI 的项目. 节名必须处现在install节中的 UpdateInis 条目中

????????????? update-ini-section-name]

ini-file,ini-section,[old-ini-entry],[new-ini-entry],[flags]

?????????????

????????????? ini-file

包含将要改变的条目的ini文件。

ini-section

节名

old-ini-entry

可选的,通常为key=value形式

new-ini-entry

可选。通常来自key=value. key 或者value可以为可替换的字符串。

flags

可选命令标志.

Value?????????????? Meaning

0?????????????????? 缺省。如果old-ini-entry key 出现在INI file 条目中, 将被new-ini-entry替换。 值会被忽略,只要key匹配即可。为无条件增加新条目到ini文件,可设置 old-ini-entry为NULL。 为无条件从ini文件中删除old-ini-entry from,设置 new-ini-entry 为NULL。

1?????????????????? 如果 old-ini-entry 的key 和value 已经存在于 INI 文件,将被 new-ini-entry替换。? old-ini-entry 参数的key和value都必须匹配

2?????????????????? 如果old-ini-entry 参数没有出现在INI 文件中, 将不进行任何替换

若 old-ini-entry 的key存在于INI 文件且new-ini-entry的key存在于 INI 文件, INI 文件中匹配的 new-ini-entry 的key参数被删除,? old-ini-entry 的key匹配参数被替换

?

3?????????????????? 类似2,但是,例外情况为:old-ini-entry 参数匹配基于key和value,并不限于key

?

可以使用通配符 (*)指代key和value的一部分和全部

?

ini文件名可以为字符串或者字符键。即%strkey% ,此 strkey 定义于[Strings]节,且必须是一个合法文件名。

?

Ini文件明应当包含目录,可以是直接目录,也可以是特定目录标示符。

可以拥有%dirid% 指定目录,dirid指定于 SetupSetDirectoryId节中. 当时用目录标示符,你应当使用反斜线号于一个目录路径中。举例:,你可以使用 %11%\card.ini 表示 CARD.INI 存在于System32 目录中。

?

以下为例子:

?

%11%\sample.ini, Section1,, Value1=2???????????? ; 新增一个条目

%11%\sample.ini, Section2, Value3=*,???????????? ; 删除老条目

%11%\sample.ini, Section4, Value5=1, Value5=4???? ;替换老条目

?

?

?

?

[Services]条目?????? 此节条目列出增加和删除的服务列表。

?

????????????? [install-section-name.Services]

AddService=ServiceName,flag,service-install-section[,event-log-install-section]

DelService=ServiceName

?????????????

????????????? ServiceName

将要安装/删除的服务名

flag

指定将如何增加服务。此参数仅用于AddService 键,取值为:

SPSVCINST_TAGTOFRONT (0x1)

将服务标签题见到服务所在组的前列

SPSVCINST_ASSOCSERVICE (0x2)

此增加的服务关联的服务.

service-install-section

服务安装节

event-log-install-section

时间记录安装节。

?

以下为例子:

????????????? [Ser_Inst.Services]

AddService = sermouse, 0x00000002, sermouse_Service_Inst, sermouse_EventLog_Inst ; Port Driver

AddService = mouclass,, mouclass_Service_Inst, mouclass_EventLog_Inst

?????????????????????? ; Class Driver

?

[Service Install]????????????? 此节列出将要安装的每一个服务信息

?????? [install-section-name_ServiceInstallSection]

DisplayName=[name]

ServiceType=type-code

StartType=start-code

ErrorControl=error-control-level

ServiceBinary=path-to-service

LoadOrderGroup=[load-order-group-name]

Dependencies=+depend-on-group-name[[,depend-on-service-name]...]

StartName=[driver-object-name]

?????????????

????????????? name

可选,友好的服务名称

type-code

驱动类型。为任何被theCreateService 函数认可的参数。

start-code

何时启动驱动程序。可为:

SERVICE_BOOT_START (0x0)

由操作系统loader启动。使用此值仅用于操作系统基本服务。

SERVICE_SYSTEM_START (0x1)

操作系统初始化式启动。

SERVICE_AUTO_START (0x2)

SCM在系统启动期间启动

SERVICE_DEMAND_START (0x3)

SCM根据需要启动

SERVICE_DISABLED (0x4)

此服务不可被启动

error-control-level

指定错误控制级别。

CRITICAL (0x3)

如果驱动装载失败,启动失败。如果启动不是在 “最后一次正确(LastKnownGood.)”控制集,切换到LastKnownGood。如果启动试图用于 LastKnownGood, 运行故障检查例程

SEVERE (0x2)

如果启动不是用于 LastKnownGood , 切换到LastKnownGood。如果启动试图LastKnownGood, 发生错误时继续启动。

NORMAL (0x1)

若初始化时失败,启动将继续,但显示警告信息

IGNORE (0x0)

若初始化时失败,启动将继续,无警告信息

path

二进制文件路径

load-order-group-name

可选. 指示服务处在的服务组中的次序: pointer, port, primary disk, and so forth.

+depend-on-group-name

可选,服务依赖的服务组,服务仅当该组的最后一个服务都启动后才启动

depend-on-service-name

可选。依赖的服务。

driver-object-name

可选。如果类型属于 Kernel driver或者file system driver,,此名用于I/O管理器装载的名称

例子:

[mouclass_Service_Inst]

DisplayName??? = %mouclass.SvcDesc%

ServiceType??? = 1????????????????? ; SERVICE_KERNEL_DRIVER

StartType????? = 1????????????????? ; SERVICE_SYSTEM_START

ErrorControl?? = 1????????????????? ; SERVICE_ERROR_NORMAL

ServiceBinary? = %12%\mouclass.sys

LoadOrderGroup = Pointer Class

?

?

[DestinationDirs]?????? 此节用于指定(copy file ,rename file等节中的目标目录)

?????? [DestinationDirs]

file-list-section=drid[,subdir]

.????? .

[DefaultDestDir=drid[,subdir]]

?

file-list-section

?Copy Files, Rename Files, 或者Delete Files 节名. drid

目录标示(DRID)。 安装程序在安装期间替换一个 DIRID采用实际的目录

DIRID? %dirid% 为预先定义的目录

DIRID 可为以下值:

-01,0xffff?????????????? 目录

01??????????????????????? SourceDrive:\path.

10??????????????????????? Windows directory.

11??????????????????????? System directory. (%windir%\system on Windows 95, %windir%\system32 on Windows NT)

12??????????????????????? Drivers directory.(%windir%\system32\drivers on Windows NT)

17??????????????????????? INF 文件目录

18??????????????????????? help目录

20???????????????????????? Fonts directory.

21??????????????????????? 察看器目录

24???????????????????????? 应用程序目录

25??????????????????????? 共享目录Shared directory.

30???????????????????????? 启动驱动器的根目录Root directory of the boot drive.

50???????????????????????? %windir%\system

51??????????????????????? 假脱机目录Spool directory.

52???????????????????????? Spool drivers directory.

53??????????????????????? 用户 Profile 目录

54???????????????????????? ntldr or OSLOADER.EXE 所在目录

?

subdir

子目录名

可选项 DefaultDestDir 提供缺省的目标目录。如果DefaultDestDir 未用于 DestinationDirs 节,缺省的目录设为 drid_system.

?

?

[SourceDisksFiles]????????? 此节指定源安装盘上的文件

????????????? 为了允许多操作系统分发源文件,你可构造针对特定平台的SourceDisksFiles 节举例来讲, 在 MIPS 平台上,所有安装功能在用到 SourceDisksFiles 节将首先查找 SourceDisksFiles.Mips 节。 如果安装功能未找到 SourceDisksFiles.Mips 节, 或者某个特定行未能在那里找到,安装功能将使用 SourceDisksFiles 节。此行为直接或间接影响安装功能处理 SourceDisksFiles节作为其进程的一部分。

?????? 大小写不敏感的前缀可为:

????????????? alpha

mips

ppc

x86

?

????????????? [SourceDisksFiles]

filename=disk-number[,subdir][,size]

?????? filename

??????????????? 在源此盘上的文件名

disk-number

??????????????? 第几号源盘包含此文件。大于等于1,且定义于 SourceDisksNames 节

subdir

??????????????? 可选参数。在源盘上的子目录,缺省为源盘的跟目录

size

???????? 可选参数,文件的压缩尺寸

????????

???????? [SourceDisksFiles]

???????? SRS01.x86 = 1?????????????????????? ;源文件SRS01.x86存在于安装盘一号盘的根目录

?

?

[SourceDisksNames]???????? 指示源文件的磁盘名称

???????? 为了允许多操作系统分发源文件,你可构造针对特定平台的SourceDisksNames节举例来讲, 在 MIPS 平台上,所有安装功能在用到 SourceDisksNames节将首先查找 SourceDisksNames.Mips 节。 如果安装功能未找到 SourceDisksNames.Mips 节, 或者某个特定行未能在那里找到,安装功能将使用 SourceDisksNames节。此行为直接或间接影响安装功能处理 SourceDisksNames节作为其进程的一部分。

大小写不敏感的前缀可为:

????????????? alpha

mips

ppc

x86

?

???????????? [SourceDisksNames[.platform]]

???????????? disk-ordinal="disk-description"[,[disk-label],[unused,path]

.??????????????

??????????????? platform

????????????????? 指示源文件应用的平台指示符。

??????????????? disk-ordinal

??????????????????????????????? 磁盘序号

??????????????? disk-description

??????????????????????????????? “”包含的字符串,用于标示磁盘。

??????????????? disk-label

??????????????????????????????? 磁盘卷标

??????????????? unused

??????????????????????????????? 保留未用

??????????????? path????????????????

??????????????????????????????? 可选参数,源文件的绝对路径,如果未用,则表示示根目录

??????????????? 如下例子中, write.exe 所有平台都一样,且存在于源盘1的\common 目录。圆盘1将所有平台都一致的文件存在于\common目录中。 CMD.EXE 文件特定于平台,磁盘2指示安装功能针对每一个平台的特定目录。HALNECMP.DLL 文件特定于MIPS 平台。

??????????????? [SourceDisksNames]

??????????????? 1 = "Windows NT CD-ROM", Instd1,, \common

???????????????

??????????????? [SourceDisksNames.Alpha]

??????????????? 2 = "Windows NT CD-ROM", Instd1,, \alpha

???????????????

??????????????? [SourceDisksNames.Mips]

??????????????? 2 = "Windows NT CD-ROM", Instd1,, \mips

???????????????

??????????????? [SourceDisksNames.x86]

??????????????? 2 = "Windows NT CD-ROM", Instd1,, \x86

???????????????

??????????????? [SourceDisksNames.ppc]

??????????????? 2 = "Windows NT CD-ROM", Instd1,, \ppc

?

??????????????? [SourceDisksFiles]

??????????????? write.exe = 1

??????????????? cmd.exe = 2

?

??????????????? [SourceDisksFiles.Mips]

??????????????? halnecmp.dll = 2

???????????????

[EventLog Install]??????????????? 该节往注册表中加入事件消息文件,也可利用此节移除事件消息文件。

??????????????? [install-section-name_EventLogInstallSection]

??????????????? AddReg=add-registry-section

??????????????? DelReg=del-registry-section

??????????????

??????????????? add-registry-section

??????????????? del-registry-section

???????????????????????????????????? 事件消息节名

??????????????? AddReg???????????????????????????? 指示哪节将作为增加事件的注册表项

??????????????? DelReg??????????? 指示删除事件项

???????????????

??????????????? 以下为典型的 EventLog 安装节:

??????????????? [sermouse_EventLog_Inst]

??????????????????????????????? AddReg=sermouse_EventLog_AddReg?????????????

??????????????? [sermouse_EventLog_AddReg]

???????? HKR,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll\;%%SystemRoot%%\System32\drivers\sermouse.sys"

??????????????? HKR,,TypesSupported,0x00010001,7

?

?

?

?

[Strings]??? 该节定义了1个或多个字符串关键字. 一个字符串key 展开一个可打印字符串

可以有针对特定语言的String节

?

??????????????? [Strings[.langid]]

??????????????? strings-key=value

???????????????

??????????????? langid

??????????????????????????????? 可选的指示string节所属语言的语言标示符. 举例, U.S. English 是 0409 以及Standard French 是 040c.

??????????????? strings-key

??????????????????????????????? 由字符和数字组成的唯一名符

??????????????? value

??????????????????????????????? 展开后的字符串内容

???????????????

??????????????? 例子:

?

??????????????? [Strings]

??????????????? String0="Corporation X"

??????????????? String1="Corporation X"

??????????????? String2="CS2590 SCSI Adapter"

?

??????????????? 特定语言的例子:

??????????????? [Strings.0409]

??????????????? ; American English strings

??????????????? S1 = "Hello"

???????????????

??????????????? [Strings.0009]

??????????????? ; British English strings

??????????????? ; Note that 0009 is used instead of 0809 to make this the default

??????????????? ; for English languages other than U.S. English.

??????????????? S1 = "Greetings"

???????????????

??????????????? [Strings]

??????????????? ; French strings

??????????????? ; Not specifying a langid makes this the default

??????????????? S1 = "Bonjour"

???????????????

???????????????

??????????????? 注释

??????????????? 尽管此节通常处于inf文件的最后一节,但是定义的字符串Key可用于inf文件任何位置。安装程序将展开字符串

??????????????? 如果用到%,请使用%%。

??????????????? Windows 95: 不可包含strings节,不支持多语言.

  相关解决方案