Windows下INF驅動安裝文件內容分析

下面先貼出了一個inf文件的內容,然後進行逐句分析:
; Installation inf for the Intel 82930 USB Bulk IO Test Board
;
; (c) Copyright 1999 Microsoft
;
[Version]
Signature="$CHICAGO$"
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999

[SourceDisksNames]
1="BulkUsb Installation Disk",,,

[SourceDisksFiles]
BULKUSB.sys = 1
BULKUSB.inf = 1

[Manufacturer]
%MfgName%=Microsoft

[Microsoft]
%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A

[DestinationDirs]
BULKUSB.Files.Ext = 10,System32\Drivers
BULKUSB.Files.Inf = 10,INF

[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg

[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg

[BULKUSB.Dev.NT.Services]
Addservice = BULKUSB, 0x00000002, BULKUSB.AddService

[BULKUSB.AddService]
DisplayName = %BULKUSB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\BULKUSB.sys
LoadOrderGroup = Base

[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"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"
下面進行分析:
1、[Version]段
習慣上,每個INF文件都開始於一個Version段,這段確定文件中描述的設備類型,上述範例中的Verson段有如下幾條語句:
Signature=”$CHICAGO$”
Class=USB
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%MSFT%
DriverVer=08/05/1999
   Signature指定使用此INF文件的操作系統,可以是$Chicage$、$Windows NT$(含有一個空格)、$Windows 95$(含有一個空格)之一,定界符$必不可少,且這些串是不分大小寫的。如果Signature的值不是這些有效的串之一,該INF文件就被人爲無效。
   Class指定設備的類名,此範例中指定的是USB類。ClassGuid指定設備註冊表的GUID,GUID是一個128位的標識符。
   Provider標誌該INF文件的提供者。%MSFT%的具體內容將在Strings段中定義,範例中的定義是MSFT=”Microsoft”,表明該INF文件的提供者是Microsoft。
   DriverVer標示驅動程序的版本號。
 
2、[SourceDiskNames]段
該段制定並且命名一個或多個包含源文件的磁盤,這些源文件用於文件拷貝或者重命名操作。該段可以有任意條目,每個條目對應一個源盤。條目格式如下:
disk=%strkey%|”disk-description”diskid是標誌一個源盤的非負整數。這個值可以是十六進制或者十進制的形式標示,但他不能佔用多餘4個字節的存儲單元。等式右邊規定一個%strkey%標記或者一個引號引起來的串,描述由diskid所標示盤符的內容或目的。在安裝過程中安裝程序可以給終端用戶顯示這個串值。
範例中SourceDisksNames段的內容如下:
[SourceDiskNames]
1=”BulkUsb Installation Disk”
範例規定源盤爲磁盤1,在安裝期間,安裝程序可以給終端用戶顯示字符串“BulkUsbInstallation Disk”
 
3、[SourceDisksFiles]段
該段命名安裝過程中所用的源文件,標誌包含這些源文件的磁盤(或者CD-ROM),並提供在所帶磁盤上包含的每個文件的目錄路徑。一個SourcesDisksFiles段可以有任意多條目,磁盤上每個文件都有一個條目。它所包含的條目格式爲
filename=diskid
Filename規定磁盤上源文件的名稱;diskid對頂一個整數來標誌包含源文件的磁盤,即在
SourceDisksNames段中規定的diskid;。範例中SourceDisksFiles段的內容如下:
[SourceDisksFiles]
BULKUSB.sys=1
BULKUSB.inf=1
範例中爲兩個文件建立的條目,這兩個文件都在磁盤1中,並且在根目錄下。
 
4、[Manufacturer]段
該段標誌一個或者多個用INF文件安裝的設備的製造商,它也爲製造商的設備即驅動程序的安裝定義Models段名。每個INF文件都必須有Manufacturer段。
上述範例的Manufacturer段有一個條目:
[Manufacturer]
%MfgName%=Microsoft
在Strings段中可以找到%MfgName%定義的字符串,本範例中定義的是MfgName=”Intel”,表明設備製造商是Intel。而右邊Microsoft也是製造商的Models段的段名。在INF中,爲每個製造商的Models段規定了一個INF編寫者定義的名字,這個名稱要在Manufacturer段中加以應用。範例中的製造商Models段如下:
[Microsoft]
%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A
該段屬於製造商的Models段,段名是由INF編寫者自行定義的,不屬於系統段名。少標識一個設備每個製造商的Models段至,並規定設備的廠商ID(VID)和產品ID(PID)同時引用這個設備INF文件的Install段。該段也可以規定一個或者多個附加設備ID,因爲有多個與初始硬件ID所識別的設備兼容,同時由相同的驅動程序驅動。當設備管理器發現從檢測設備所得到的ID,符號此段定義的ID時,設備管理器就知道找到了正確的INF文件。
範例中規定了一個設備,設備的VID是0x045E,而PID是0x930A。VID是由USB管理委員會給每個USB芯片廠商統一分配的,例如Philips公司的VID是0x0471,Cypres公司的VID是0x0547等,範例中的VID是Intel公司的。產品ID(PID)是由各個廠商自己定義的,這裏VID0x930A是Intel的一個USB批量傳輸的實驗板。
範例中該條目等式右邊的BULKUSBDev給設備標識了一個INF文件編寫者定義的Install段。
 
5、[DestinationDirs]段
該段爲所有的硬件拷貝、刪除和改名操作規定目標目錄。範例中的DestinationDirs段如下:
[DestinatinDirs]
BULKUSB.Files.Ext=10,System32\Drivers
BULKUSB.Files.Inf=10.INF
DestinationDirs段中條目等式的左邊規定INF文件編寫者定義的段名,這些段中的文件將會被存入等式右邊指定的目錄中,並且這些文件可以被INF文件中其他地方的CopyFiles、RenFiles和DelFiles命令引用。例如,範例中這兩個段的定義如下:
[BULKUSB.Files.Ext]
BULKUSB.sys
[BULKUSB.Files.Inf]
BULKUSB.Inf
DestinationDirs段中條目等號右邊的10是一個邏輯磁盤標誌符號(Logical Disk Identifier, LDID),它規定了對文件操作的目標目錄標識符,後面跟隨的是子目錄,作爲文件操作的目標地址。範例中第一個文件BULKUSB.sys的目標地址是WinNT\System32\Drivers;第二個文件BULKUSB.Inf的目標地址是WinNT\INF。
DestinationDirs段也可以包含一個缺省目標目錄DefaultDestDird的條目,爲所有對文件的拷貝、刪除和更名操作規定省略的目標路徑,這些文件沒有明確的列在其它條目所引用的文件列表中。
 
5、Install段
Install段包含指導安裝程序安裝所需軟件的實際指示。該段必須在一個設備或者型號(Model)的條目中引用。每個Models的每個Install段包括一個可選的DriverVer條目和一個或多個引用INFormation中附加命令段的命令,這些命令索引用的段包含安裝驅動程序文件及向註冊表寫入設備專用的和驅動程序專用信息命令。這裏,首先列出這個斷的常用格式
[install-section-name]
[install-section-name.nt]
[install-section-name.ntx86]
[CopyFiles=@filename|file-list-section]
Addreg=add-registry-section
[include=filename.inf]
… …
… …
首先,看到有3個可選的段名,在Windows 9x平臺中,提供了一個無修飾的Install段名[install-section-name],其中規定設備的安裝條目。在Windows 2000平臺中,提供相應的
[install-section-name.nt]段名,如果還要限定在x86爲基礎的Windows 2000平臺上,則提供[install-section-name.ntx86]段名。設備安裝程序將搜索最合適後綴的install段,例如,假設有3個install段,第一個無後綴,後兩個分別帶有.NT和.NTx86後綴。如果安裝到x86平臺上的Windows 2000中,安裝程序會使用.NTx86段;如果安裝到非Intel平臺上運行的Windows 2000中,安裝程序將使用.NT段;如果安裝到Windows 98中,安裝程序使用無後綴段。
 
  ☆[CopyFiles=@filename|file-list-section]:或者指定一個要從源媒體拷貝到目標設備的文件名,或者引用一個或多個INFormation編寫者定義的段,其中列出了源媒體上要拷貝到目標設備的相關文件。這個命令是可選的,但是大多數的段都包括這個命令。
  ☆Addreg=add-registry-section:這個命令引用一個或多個INFormation編寫者定義的段,其中規定了要寫入註冊表的新的子鍵,這些新關鍵字可能有初始條目,在這些段中也可以修改 已有關鍵字的值。範例中索引用的段如下:
[BULKUSB.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,BULKUSB.sys
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","MaximumTransferSize",0x10001,4096
HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","DebugLevel",0x10001,2
HKLM是註冊表的根鍵,它是HKEY_LOCAL_MACHINE的縮寫。而HKR與註冊表關鍵字相關,最適合於AddReg命令出現的地方。比如,註冊表中每個設備的“硬件”子鍵:..\Enum\枚舉器ID\設備ID,與此相對的註冊表中每個驅動程序指定的“軟件”子鍵:..CLASS\類GUID\設備ID等。除此之外還有HKCR、HKCU、HKLM和HKU。
前面所舉範例的Install段如下:
[BULKUSB.Dev]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
[BULKUSB.Dev.NT]
CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.Inf
AddReg=BULKUSB.AddReg
所需拷貝的兩個文件在INF編寫者定義的BULKUSB.Files.Ext和BULKUSB.Files.Inf段中,而要添加到註冊表的項目則在BULKUSB.AddReg段中。

6、Install.Service段
該段包含一個或者多個AddService命令,用以控制一個特定驅動程序的服務裝載的時間方式,控制本服務對其他服務和下一級驅動程序的依賴等,房裏中的定義如下:
[BULKUSB.Dev.NT.Services]
Addservice = BULKUSB, 0x00000002, BULKUSB.AddService
其中,BULKUSB是指定的所需安裝服務的名稱。對於一個設備,這個值通常是該設備驅動程序的屬性。0x00000002是一個系統指定的標記(Flag),不同的標記有不同的服務功能。最後一項BULKUSB.AddService是INF文件編寫者定義的特定段,其中包括了所需添加的服務項目,其範例的定義如下:
[BULKUSB.AddService]
DisplayName = %BULKUSB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\BULKUSB.sys
LoadOrderGroup = Base
 
8、[Strings]段
[Strings]段就是字符串段。該段定義了其他段內所指定的字符串,段內的每一個項目都符合一個在其他段內使用百分比符號(%)包括起來的字符串。範例中的定義如下:
[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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章