• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            elva

            驅(qū)動(dòng)程序安裝-INF

            當(dāng)用戶剛插上設(shè)備或啟動(dòng)引導(dǎo)(Boot)時(shí),設(shè)備是剛剛物理存在于機(jī)器上時(shí),總線驅(qū)動(dòng)應(yīng)自動(dòng)地,動(dòng)態(tài)的檢測(cè),識(shí)別硬件的變化。這時(shí),就要有一個(gè)識(shí)別設(shè)備,安裝驅(qū)動(dòng)的INF文件。

            所謂文件是指用一個(gè)共同的符號(hào)名稱作為代表,若干個(gè)邏輯記錄構(gòu)成的信息集合或目的,形式和內(nèi)容的表示上彼此相似的一些信息項(xiàng)的集合。簡單的說,就是具有一定名稱的一組相關(guān)數(shù)據(jù)的集合。

            所謂INF文件,就是以INF為擴(kuò)展名的文本文件,他控制與驅(qū)動(dòng)安裝程序有關(guān)的大多數(shù)活動(dòng)。

            因?yàn)檫@個(gè)INF文件抽象了設(shè)備的上層建筑,含有安裝驅(qū)動(dòng)所有的必需的信息,所以它要由驅(qū)動(dòng)開發(fā)人員隨驅(qū)動(dòng)一起提供,來告訴操作系統(tǒng)那些文件需要復(fù)制到用戶的硬盤上,應(yīng)添加或修改哪個(gè)注冊(cè)表等。簡單的說,INF文件就是機(jī)器的參考文件(Information File)。

            INF文本文件與Windows 3XINI文件很類似,INF文件分為幾節(jié),每節(jié)包括一項(xiàng)或幾項(xiàng)。每節(jié)與安裝過程中的某一步相關(guān):比如說,某一節(jié)是關(guān)于文件拷貝的。某一節(jié)是關(guān)于如何添加注冊(cè)表項(xiàng)等等。作為一個(gè)開發(fā)者,你可以通過任何文本編輯器創(chuàng)建生成INF文件。Microsoft還在DDK中提供了INFEDIT工具,使擁護(hù)可以很方便的編輯INF 文件(如果實(shí)例用INFEDIT,請(qǐng)參閱DDK)。

            INF文件可以支持很復(fù)雜的安裝腳本,但是大多數(shù)的開發(fā)者只愿意使用處理一些最基本的腳本。一個(gè)基本的安裝腳本應(yīng)該包括:

            1鑒定硬件設(shè)備

            2把驅(qū)動(dòng)程序從安裝盤上拷貝到系統(tǒng)盤上去

            3鑒定硬件設(shè)備資源的需求

            4當(dāng)硬件設(shè)備被仿真是,就在注冊(cè)表中加上DevLoader一項(xiàng)

            INF文件通常與磁盤或光盤上的硬件驅(qū)動(dòng)程序一起提供。INF文件的結(jié)構(gòu)和內(nèi)容由驅(qū)動(dòng)程序創(chuàng)作者決定

            1.          舉例說明

            下面舉例說明有關(guān)INF的基本特征和內(nèi)容,以便更好的理解。

            [Version]

            Singnature=$windowsNT$                 //選擇版本

            Class=Unknown                          //系統(tǒng)定義用戶指定的類名

            Provider=%ABCD%                        //提供商

            DirverVer=11/15/2001                    //

            CatelogFile[.Ntetc]          //包含WHQL數(shù)字簽名的目錄說明文件。

             

            [Strings]

            ABCD=”me, the writer”       //定義宏

            [SourceDisksNames]     //源代碼盤或發(fā)行盤的描述,目錄和打包文件

            L=”Ggdriver directory”…obj\i386\

            [SourceDisksFiles]      //和打包文件

            Ggdriver.sys=l,obj\i386\some\

            [DestinationDirs] //復(fù)制缺省文件和Filelist節(jié)中的文件,

            //指定目錄和子目錄的ID 并指定文件的標(biāo)準(zhǔn)位置。

             

            Ggdiver.Files.Driver=10,System32\Drivers

            Ggdiver.Files.Driver=10, System32\Drivers

            [Manufacturer]            //指定生產(chǎn)廠商和models節(jié)中相應(yīng)的名稱

            %ABCD%=Ggdriver

            [models]                  //最新的硬件ID號(hào)先出現(xiàn)

            %USBDevice_V2%=V2Install,USB\VID_ABCD%PID_EFOL&REV_DO02

            %USBDevice_V1%=V2Install,USB\VID_ABCD%PID_EFOL

            [install]                         //指向添加的設(shè)備接口列表

            Copyfiles=Ggdriver.Files.Driver

            AddReg=Ggdriver.AddReg

            LogConfig=logconfig

            DirverVer=19/10/2001

            ProfileItems=AB\cd

            [filelist]

            [addreg]

            [logconfig]

            [install.AddService]

            ServiceTypy=l

            StartType=start-code

            ErrorControl=error-control-level

            ServiceBinary=path-tc-driver

            INF文件是一個(gè)文本文件,由不同的節(jié)組成,每一個(gè)節(jié)從括在方括號(hào)中的節(jié)名稱開始,后面是節(jié)的內(nèi)容。這些節(jié)也是分層的,其先后順序與本樣例基本保持一致。

            在上面的樣例中:

            [Verson ]節(jié)中,Signature項(xiàng)只能在$WindowsNT$,$Winfows95$以及$WindowsNT$中選一;

            Provider項(xiàng)是INF文件的創(chuàng)造者,通常是設(shè)備的生產(chǎn)商;

            Class項(xiàng)是系統(tǒng)定義用戶指定的類名;

            CatalogFile[.NTetc]則是必須包含的驅(qū)動(dòng)程序包的WHQL數(shù)字簽名的目錄說明文件。

            [Strings ]節(jié)中定義代替字符串的宏: 

            如例中:ABCD=me,the writer”即是說%ABCD%的意思是me,the writer。而在使用時(shí),也用“methe writer”代替ABCD。為了適應(yīng)不同的語言上下文,可以在String 的后面附加(在WinntH`中定義的)LangIDSubLangID,形成新的Strings節(jié)。LangIDSubLangID都是兩位數(shù),它們合作指定某語言上下文。

            如定義一個(gè)英國英語(0902)的flour:

            [Strings]

            ABC=”Flor”

            [Strings.0902]

            ABC=”Flour”

            [SourceDisksName][SourceDisksFiles]節(jié)分別是指源代碼盤或發(fā)行盤的描述,目錄和打包文件。如果所有文件都在根目錄中,[SourceDisksFiles]節(jié)可以是在空的

            [DestinationDirs]節(jié)中,復(fù)制缺省文件和Filelist節(jié)中的文件,指定目錄和子目錄的ID 并指定文件的標(biāo)準(zhǔn)位置。

            [Manufacture]節(jié)指定生產(chǎn)廠商和models節(jié)中相應(yīng)的名稱;

            [install]節(jié)則指向添加的設(shè)備接口列表,接口鍵的注冊(cè)表,其中:

            Copyfiles=filename|filelist項(xiàng),指定要復(fù)制的文件或后面列出文件的列表節(jié)的名稱。

            AddReg=addreg項(xiàng),指定后面遺留設(shè)備節(jié)的名稱。

            LogConfig=logconfig項(xiàng),指定后面遺留設(shè)備節(jié)的名稱。

            ProfileItems項(xiàng),指定添加到計(jì)算機(jī)界面“開始”菜單中的文件名稱項(xiàng)。

            [filelist]指定要安裝的文件列表。

            [addreg]節(jié),指定新的鍵和值。

            [logconfig]節(jié),指定遺留設(shè)備的I/O地址,IRQ等配置的詳細(xì)信息。

            [installAddService]節(jié),只針對(duì)Windows2000的驅(qū)動(dòng)程序,指定驅(qū)動(dòng)程序的詳細(xì)信息。

             

            下面我們具體介紹一下INF文件結(jié)構(gòu)。

            1.1INF文件結(jié)構(gòu)

            一個(gè)INF文件是一個(gè)被劃分為節(jié)(Section)的簡單的文本文件,每節(jié)由方括號(hào)([])內(nèi)的標(biāo)示符表示。某些節(jié)名字是必須的,而另一些是驅(qū)動(dòng)程序?qū)S玫摹C抗?jié)下面的各項(xiàng)控制某些安裝操作,或者連接或列舉其它節(jié)。

            文件中各節(jié)出項(xiàng)的順序并不重要,因?yàn)槊抗?jié)都被命名和鏈接了。一節(jié)內(nèi)容在遇到另一節(jié)或者遇到文件結(jié)尾之前繼續(xù)執(zhí)行。規(guī)定節(jié)的唯一的名字是區(qū)分大小寫的,并且在長度上必須限制在28個(gè)字符以內(nèi),以保持與Windows 98 的兼容性。節(jié)的名字可以包括空格,但是只有在整個(gè)名字應(yīng)用時(shí)。允許下劃線和點(diǎn)字符。

            節(jié)中各項(xiàng)的基本格式如下:

            entry=value[value….]

            這里的entry是一個(gè)指令,關(guān)鍵字或者文件名,而value是應(yīng)用于entry的屬性。

            下圖表示了節(jié)名字鏈接。

            Entryvalue名字可以規(guī)定為一個(gè)字符串記號(hào)(string token),它是一個(gè)由百分號(hào)%包圍的替換字節(jié)串,一個(gè)獨(dú)立的INF節(jié)——[Strings],給指定的語言ID提供了字符串記號(hào)值。

            下面我們看一下INF文件的各個(gè)小節(jié)及小節(jié)的基本內(nèi)容:(表1,表2

            下面我們?cè)敿?xì)每一節(jié)的內(nèi)容:

            1.2 Version節(jié)

            一個(gè)有效的INF文件以一個(gè)[Version]節(jié)開始,它擔(dān)當(dāng)整個(gè)INF文件的頭部和簽名。[Version]節(jié)中允許的和要求的項(xiàng)都列在了下表-3

             

            1.3 Manufacturers節(jié)

            另一個(gè)必須的節(jié)是[Manufacturers]項(xiàng)。該節(jié)中的每個(gè)項(xiàng)列出INF文件安裝的設(shè)備和他們的驅(qū)動(dòng)程序。每個(gè)項(xiàng)的格式如下:

             manufacturer=model

            這里的manufacturer列出要被安裝的一個(gè)或多個(gè)硬件型號(hào)的制造商在INF文件中的唯一名字。Model值指向另一個(gè)INF節(jié)名字,進(jìn)一步列出硬件型號(hào)驅(qū)動(dòng)程序安裝的方向。

            1.4 Models節(jié)

            對(duì)于列在[Manfacturers]節(jié)中的每個(gè)型號(hào),必須有一個(gè)相應(yīng)的節(jié)作為由model指定的節(jié)出現(xiàn)。每個(gè)model項(xiàng)的形式為:

            device-description=install-section-namehw-id[compatible-id…]

            這里的device-description表示人可以理解的設(shè)備型號(hào)列表和一個(gè)簡單的描述。在一些安裝過程中此字符串在一個(gè)對(duì)話框中提交給用戶,因此有必要提供多種語言作為字符串記號(hào)。

             install-section-name值引用[DDInstall]節(jié),表示值進(jìn)一步安裝的另一個(gè)INF節(jié),hw-id值是硬件設(shè)備在PNP兼容的總線上聲明時(shí)返回的PnP標(biāo)示符。例如。USB \ VID_045E&PID_OOB   標(biāo)示USB上的Microsoft HIDHuman Input Device)鍵盤設(shè)備。能夠增加任意數(shù)量的compatlible-id值,表示相同的安裝腳本可以用于列表中包含的任何設(shè)備。

            1.5 DDInstall節(jié)

            INF節(jié)名字鏈表的低部附近(但并非最低部)是[DDInstall]節(jié),它從[Models]節(jié)中為每個(gè)制造商的每個(gè)型號(hào)規(guī)定一個(gè)唯一的名字。[DDInstall]節(jié)中允許的和要求的項(xiàng)目見下面表4.

                   雖然在語法上只有AddReg項(xiàng)是必需的,但是CopyFiles項(xiàng)是[DDInstall]節(jié)的一個(gè)基本指令。它采取如下形式:

            CopyFiles = file – list – section [file – list – section….]或者

            CopyFile = @filename

            前一種形式更加常用,因?yàn)樗试S一個(gè)間接指針指向包含被安裝的文件列表的其他節(jié)。然而,對(duì)于簡單的驅(qū)動(dòng)開發(fā)程序安裝,采取直接文件名方法就行了。在下面兩個(gè)小節(jié)中將對(duì)AddRegCopyFiles指令做進(jìn)一步解釋。

            1.6  CopyFiles節(jié)

            INF文件的[CopyFiles]節(jié)有一個(gè)唯一的名字,并從[DDInstall]節(jié)的CopyFiles指令引用它。該節(jié)中的每個(gè)項(xiàng)采用如下形式:

            destination – filename[source- filenametemp-filenameflag]

            這里的destiantion-filename是最重要復(fù)制的目標(biāo)文件名。如果源文件名不相同,必須規(guī)定source – filenameTemp-filename值不再適用(雖然 Windows 98仍然要求),它在系統(tǒng)再次引導(dǎo)之前規(guī)定新文件的臨時(shí)文件名。對(duì)于Windows 2000,忽略此值。

             Falg 值規(guī)定對(duì)新目標(biāo)文件的處理,其描述見表5。可以對(duì)falg值中的各個(gè)為進(jìn)行“或”運(yùn)算,以使多個(gè)操作起作用。幾種操作是互斥的(例如,WARN_IF_SKIPNOSKIP,有疑問時(shí)應(yīng)當(dāng)查閱有關(guān)文檔。

            因?yàn)?strong>[CopyFiles]節(jié)的項(xiàng)的語法沒有包含一個(gè)可選項(xiàng)來規(guī)定源文件的磁盤或路徑,必須使用其他INF節(jié)——[SourceDisksNames][SourceDisksFiles]。然而[CopyFiles]節(jié)中各項(xiàng)復(fù)制的文件由另一個(gè)INF節(jié)——[DestiantionDirs]節(jié)指定。

            1.7 AddReg節(jié)

            一個(gè)INF文件的[AddReg]節(jié)被唯一命名,并從[DDInstall]節(jié)中的AddReg指令引用它。此節(jié)的目的是提供增加或者修改目標(biāo)系統(tǒng)注冊(cè)表中的項(xiàng)目。本節(jié)中每個(gè)項(xiàng)目采取如下形式:

             reg-root[subkeyvalue- nameflags value]

            這里的reg- root是注冊(cè)表庫(hive)之一的縮寫,見表6所列。值表示要被修改的注冊(cè)表庫。Subbkey值表示庫底下的鍵名,在層次結(jié)構(gòu)中子鍵用反斜線(\)字符隔開。例如,software\W2KdriverBook\Driver\Seting HKCU或者HKLM庫的一個(gè)有效子鍵。

            Value-name指定要增加或修改的注冊(cè)表值。每個(gè)注冊(cè)表鍵包含一個(gè)或多個(gè)值,保存不同類型的數(shù)據(jù)。注冊(cè)表編輯器(Registy Editor)在右邊面板中列出子鍵的值。值名和值數(shù)據(jù)同時(shí)在該面板中出現(xiàn),左邊面板只列出子鍵。圖3說明了注冊(cè)表術(shù)語之間的關(guān)系。

            Flags指定數(shù)據(jù)保存的類型,flages可能的位置見表7所列:

            1.8  SourceDisksNames節(jié)

            如果INF文件控制的驅(qū)動(dòng)程序文件的分布跨越多個(gè)磁盤(軟盤或光盤),則INF文件必須包含一個(gè)[SourceDisksNames]節(jié)。本節(jié)在分布集中為每個(gè)磁盤包含一項(xiàng),項(xiàng)目采取如下形式:

            Diskid=disk – descript[tagfileunusedpath]

            這里的diskid`是分布集內(nèi)的一個(gè)一個(gè)唯一的編碼。通常,磁盤從1開始編碼。Disk – description 標(biāo)簽是一個(gè)供人閱讀的文本串,可以保證安裝過程中擁護(hù)提供正確的磁盤,在安裝過程繼續(xù)之前核對(duì)tagfile值是否在插入的煤體上。如果tagfile文件不存在,則提示用戶插入正確的磁盤。如果tagfile值包含-CAB擴(kuò)展,則該文件被認(rèn)為是磁盤上驅(qū)動(dòng)程序源文件的壓縮文件集。

            Path值是磁盤上驅(qū)動(dòng)程序源文件的相對(duì)于根目錄的磁盤路徑。與tagfile值一樣,path是可選的。如果忽略它,則認(rèn)為根目錄是文件的源。

            1.9 SourceDisksFiles節(jié)

            驅(qū)動(dòng)程序INF文件還必須包含一個(gè)稱為[SourceDisksFiles]的節(jié)。此節(jié)列出驅(qū)動(dòng)程序安裝期間使用的文件名。每個(gè)文件對(duì)應(yīng)于本節(jié)中的一個(gè)項(xiàng),并采取如下形式:

            Filename = diskid[sbdirsize]

            很自然,diskid值在[SourceDisksNames]節(jié)中指定了找到filename的一個(gè)磁盤,subdir值可選,它指定文件在磁盤上的一個(gè)路徑。Size值可選,指定文件以字節(jié)為單位的未壓縮大小。在開始文件復(fù)制前,安裝進(jìn)程可以使用此大小確定源文件是否合適目標(biāo)系統(tǒng)。

            1  DestinationDirs節(jié)

            這是INF文件中必需的節(jié),指定源文件的目標(biāo)目錄。沒有這部分內(nèi)容,安裝程序或進(jìn)程將沒有用來拷貝文件的目標(biāo)目錄。[DestinatonDirs]節(jié)中的項(xiàng)采取如下形式:

            File – list – section = dirid[subdir]或者

            DefaultDestDir = dirid[subdir]

            這里file – list – section規(guī)定了在[CopyFiles]指令中調(diào)出來的部分。它規(guī)定一個(gè)指令拷貝的所有文件安裝到指定的目錄。對(duì)于項(xiàng)目DefaultDestDir,上述規(guī)范適用于所有[CopyFiles]指令,否則不會(huì)與[DestionationDirs]節(jié)中的file- list – section項(xiàng)關(guān)聯(lián)。

            Dirid值根據(jù)表8規(guī)定了目標(biāo)的一個(gè)列舉值。如果提供了值subdir,它指定diid調(diào)處的目錄下面的一個(gè)相對(duì)路徑。

             

            2. DDInstall.Services節(jié)

            為了真正的使復(fù)制的文件成為目標(biāo)系統(tǒng)上的驅(qū)動(dòng)程序,必須通知服務(wù)器管理程序(SCM)。安裝在Windows 2000下的每個(gè)驅(qū)動(dòng)程序在HKLM\System\Current-ControlSet\Services下的注冊(cè)表中有一項(xiàng)。ServiceType值為1表示一個(gè)內(nèi)核模式設(shè)備驅(qū)動(dòng)程序。StartType指定在引導(dǎo)過程中的什么點(diǎn)上驅(qū)動(dòng)程序裝入(3表示按需或手動(dòng)啟動(dòng))。在驅(qū)動(dòng)程序裝入過程中遇到錯(cuò)誤時(shí),ErrorControl值確定發(fā)生了什么情況。ServiceBinary值指向驅(qū)動(dòng)程序文件(。SYS文件)的位置,但是,如果二進(jìn)制值位于%windir%\system32\drivers目錄,并且與HKLM\…\Services下的子鍵有相同的名字,則可以忽略ServiceBinary值。

            DDInstall.Services節(jié)項(xiàng)目中包括一個(gè)形式如下的項(xiàng)目:

            AddService = ServiceName[flags]service – install – section[eventlog – install – section]

            這里的ServiceName表示設(shè)備的名字,通常是驅(qū)動(dòng)程序的名字,沒有。SYS擴(kuò)展名。Flags值的描述見表9

            Service – install – section和可選的eventlog- install – section值調(diào)出控制服務(wù)值項(xiàng)目(諸如ServiceTypeStartType)的新增的INF節(jié)名字。

            3. ServiceInstall 節(jié)

            [ServiceInstall]節(jié)名字實(shí)際上由DDInstall.Services節(jié)中每個(gè)AddService項(xiàng)唯一規(guī)定,它控制把驅(qū)動(dòng)程序安裝到服務(wù)控制管理程序。[ServiceInstall]節(jié)允許的項(xiàng)見表10所列。

            4 .驗(yàn)證INF語法

            DDK包含一個(gè)基本的工具CHKINF,在DDKTools目錄中。它依賴于Perl腳本引擎,該引擎可以從www.perl.com上下載。雖然工具沒有什么優(yōu)點(diǎn),但它在檢查標(biāo)準(zhǔn)Microsoft INF文件時(shí)能報(bào)告許多錯(cuò)誤。工具以HTML文件形式輸出。

            DDK Tools目錄還包括一個(gè)用語簡化INF文件構(gòu)造的實(shí)用程序CENINFEXE 。 必須把該工具區(qū)分為基本工具,它對(duì)入門者是有用的。

            最后,DDK提供了STAMPINFEXE這一簡單工具,它提供了快速增加或修改INF中版本信息的機(jī)制。

            posted on 2008-03-17 10:00 葉子 閱讀(10677) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 驅(qū)動(dòng)開發(fā)

            Feedback

            # re: 驅(qū)動(dòng)程序安裝-INF 2008-06-25 20:12 毛小平

            驅(qū)動(dòng)程序安裝INF視頻和游戲控制器  回復(fù)  更多評(píng)論   

            久久99国产精品成人欧美| 精品国产乱码久久久久久浪潮 | 午夜视频久久久久一区 | 精品国产乱码久久久久久1区2区 | 亚洲欧美一级久久精品| 人妻无码中文久久久久专区| 久久精品国产一区| 久久久久波多野结衣高潮| 国产成人精品久久二区二区| 久久99久久99小草精品免视看| 久久国产香蕉视频| 亚洲女久久久噜噜噜熟女| 成人午夜精品久久久久久久小说| 伊人久久大香线蕉综合网站| 国产精品视频久久| 伊人久久大香线蕉av一区| 大蕉久久伊人中文字幕| 精品熟女少妇a∨免费久久| 热久久视久久精品18| 精品一久久香蕉国产线看播放| 人人狠狠综合久久88成人| 亚洲欧美精品一区久久中文字幕| 四虎国产精品免费久久5151| 欧美大香线蕉线伊人久久| 伊人久久综在合线亚洲2019| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 色老头网站久久网| 国产精品免费久久久久影院| 污污内射久久一区二区欧美日韩 | 精品免费tv久久久久久久| 欧洲国产伦久久久久久久| 久久高潮一级毛片免费| 伊人久久成人成综合网222| 高清免费久久午夜精品| 久久国产一片免费观看| 91久久精品无码一区二区毛片| 香蕉久久夜色精品国产尤物| 亚洲午夜无码久久久久小说| 久久精品国产99国产电影网| 99久久无色码中文字幕| 69SEX久久精品国产麻豆|