INF文件全稱Information File文件,是Winodws操作系統下用來描述設備或文件等數據信息的文件。INF文件是由標准的ASCII碼組成,您可以用任何一款文字編輯器查看修改其中的內容。一般我們總是認為INF文件是系統設備的驅動程序,其實這是錯誤的認識,Windows之所以在安裝某些硬件的驅動時提示需要INF文件是因為INF文件為該設備提供了一個全面描述硬件參數和相應驅動文件(DLL文件)的信息。就好比我們看著說明書安裝電腦硬件一樣,我們就是Windows系統,說明書就是INF文件。INF文件功能非常強大,幾乎能完成日常操作的所有功能。您可以把它看成是Windows系統底下的超強
批初理。要熟練掌握和理解甚至是編寫INF文件需要對其內部結構有相當的認識。下面就讓我們來深入到INF文件中的內部一窺其真面貌吧!
INF文件的組成有節(Sections),鍵(Key)和值(value)三部分。
關鍵節有[Version]版本描述信息,主要用於版本控制。
[Strings]字符串信息,用於常量定義。
[DestinationDirs]定義系統路徑信息。
[SourceDisksNames]指明源盤信息。
[SourceDisksFiles]指明源盤文件名。
[DefaultInstall]開始執行安裝。
其它的節可以自定義
*規則一:INF文件是分節的,每一個INF文件有許多的節組成,節名用方括號括起來。這些節名有些是系統定義好的,有一些是用戶自定義的。每一個節
名最長為255個字符(Windows 2000/XP/2003操作系統中)或28個字符(Windows
98操作系統中)。節與節之間沒有先後順序的區別,另外,同一個INF文件中如果出現兩個同樣的節名,則系統會自動將這兩個節名下面的條目合並到一起。
*規則二:在節與節之間的內容叫條目,每一個節又是由許多的條目組成的,每一個條目都是由形如“signature="$CHICAGO$"”的形式組成的。如果每一個條目的等號後有多個值,則每一個值之間用“,”號分隔開。
*規則三:INF文件對大小寫不敏感。
*規則四:“;”號後面的內容為注釋。
*規則五:如果一個條目的內容過多,在一行無法書寫完全,則用“\”將一行內容書寫為多行。
明白了INF文件的規則後,讓我們一起來解剖INF文件的結構。
;指定版本和簽名節
[VERSION]
;系統根據Signuture看是不是適合當前版本,如果適合的話就執行,否則不執行,當然強制安裝是可以的
;用於WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
;指定安裝文件布局,該行是可選的,如果沒有提供布局信息文件,則在INF文件內必須包含[SourceDisksNames]和[SourceDisksFiles]節
LayoutFile=filename.inf
[SourceDisksNames]節
[SourceDisksNames]節羅列源文件所在盤符序列碼、盤描述符、盤卷標號和盤序列號。
[SourceDisksNames]節內語句的語法為:
disk-ordinal=“disk-description”,disk-label,disk-serial-number
其中disk-ordinal為必選項,是盤符序列碼,標識一個源盤,具有惟一性,一般可設置為從1開始遞增的整數,0不是一個有效的盤符序列碼。當存在多個源盤時,盤符序列碼之間不能重復。
disk-description為必選項,是盤描述符,用雙引號括起的字符串或字符串宏描述盤的內容或目的。安裝引擎將該字符串顯示在對話框內以提示用戶。
disk-label為源盤的卷標識。
disk-serial-number未使用,但必須被設置為0。
[SourceDisksFiles]節
[SourceDisksFiles]節指定安裝時使用的源文件和盤符序列碼、盤描述符。 [SourceDisksFiles]節內語句的語法為:
file-name=disk-number[,subdir] [,file-size]
其中file-name為必選項,是源盤上文件的名稱。
disk-number是包含file-name指定文件所在源盤的盤符序列碼,該盤符序列碼需在[SourceDisksNames]節中列出,並大於或等於1。
Subdir為可選項,指定文件所在源盤的子目錄,如省略則源盤為缺省安裝路徑。
file-size為可選項,表明文件的大小,以字節為單位。
[DestinationDirs]
;指定CopyFiles、RenFiles或DelFiles入口的缺省操作目錄
;語法file-list-section=LDID,[Subdir]
;LDID列表如下:
;01 ;current directory
;04 ;backup directory
;10 ;windows directory
;11 ;system dir
;12 ;iosubsys
;13 ;command
;14 ;control panel directory
;15 ;printers directory
;16 ;workgrou dir
;17 ;inf dir
;18 ;help dir
;19 ;administration dir
;20 ;fonts
;21 ;viewers
;22 ;vmm32
;23 ;color dir
;25 ;shared dir
;26 ;winboot
;28 ;host winboot
;30 ;root of boot drive
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists
;以下例子為安裝到window\web目錄下
;DefaultDestDir=10,"web"
;--------- Manufacturer and Models Sections ----------------------------------
;Mfg0為設備,MfgName是廠商
[Manufacturer]
%MfgName%=Mfg0
; Manufacurer Name 對要安裝的設備的描述,並為要安裝的設備指出 [Install] 節區。
;[manufacturer-name]
;device-description=install-section-name,device-id[,compatible-device-id]...
;device-description 就是對要安裝的設備的描述。
;install-section-name 就是此設備的 [Install] 節區名稱,
;manufacturer-name 節區名稱必須已在[Manufacturer] 節區中被定義。
;device-id 是此設備 的硬件標志符,每個廠家的不同的硬件對應著不同的設備標志符。
[Mfg0]
; PCI hardware Ids use the form
; PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;改成你自己的ID
;DeviceDesc為設備名稱的變量,在[String]中定義;PCI\VEN_9999&DEV_9999 為設備標志符
%DeviceDesc%=YouMark_DDI, PCI\VEN_9999&DEV_9999
[YouMark_DDI]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_9X_AddReg
[YouMark_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,HelloWDM.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0
; --------- Files (common) -------------
[YouMark_Files_Driver]
HelloWDM.sys
;--------- Strings Section ---------------------------------------------------
[Strings]
MfgName=“Microsoft"DeviceDesc="MyDevice"