[转载]INF文件格式说明
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節,不支持多語言.
出處:http://blog.csdn.net/shanhe/archive/2004/12/25/229368.aspx
總結
以上是生活随笔為你收集整理的[转载]INF文件格式说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: five months plan
- 下一篇: 设备驱动程序INF文件