INF 檔案的一般語法規則

INF 檔案是組織成具名區段的文字檔。 有些區段有系統定義的名稱,有些區段的名稱是由 INF 檔案的寫入器所決定。

每個區段都包含裝置安裝元件所解譯的區段特定專案。 某些專案會以預先定義的關鍵字開頭。 這些專案稱為 指示詞

某些 INF 檔案專案基本上是針對特定用途,從一個區段指向另一個區段的指標。 例如, INF AddReg 指示詞 會識別一個區段,其中包含指示 Windows 修改登錄的專案。 這些專案有時會包含其他引數, (Windows 在安裝期間解譯所需的或選擇性) 。

其他 INF 檔案專案不會指向其他區段,但提供 Windows 在安裝期間使用的資訊,例如檔案名、登錄值、硬體設定資訊、旗標等等。 例如, INF DriverVer 指示詞 會提供驅動程式版本資訊。

當 Windows 開始安裝時,它會先尋找 INF 版本區段 ,以確認 INF 檔案的有效性。 然後,它會尋找 INF 製造商區段來啟動安裝。 本節包含 INF 模型 區段的指示詞,後者會根據所安裝裝置的硬體識別碼,提供指示詞,導致各種 INF DDInstall 區段

下列語法規則會控管 INF 檔案的必要和選擇性內容、使用字串標記的區段名稱格式,以及行格式、接續和批註。

區分大小寫

  • 區段名稱、專案和指示詞不區分大小寫。 例如, 版本VERSIONVersion 在 INF 檔案中都是同樣有效的區段名稱規格。

必要和選擇性內容

  • 任何特定 INF 檔案中必要和選擇性區段、專案和指示詞的集合取決於要安裝的裝置/驅動程式或元件類型。

  • 安裝任何特定裝置及其驅動程式所需的區段、區段特定專案和指示詞集,如果存在,則也會相依于對應的類別安裝程式。 如需系統提供類別安裝程式如何處理裝置類型特定 INF 檔案的詳細資訊,請參閱 WDK 中的裝置類型特定檔。

  • 在語法定義中,選擇性專案會以 無曲 括弧分隔 ([,]) 。 另一方面, 體括弧 ([]) 是包含專案的必要元素。 在下列範例中,需要Version周圍的括弧,而Class=類別名稱周圍的括弧則表示這個專案是選擇性的。

    [Version]
    
    Signature="signature-name"
    [Class=class-name]
    ...
    

區段名稱

  • 區段可以依任何順序指定。 根據慣例,大部分的 INF 檔案會依慣例列出區段,但 Windows 會依名稱尋找區段,而不是依 INF 檔案內的位置。

  • INF 檔案中的每個區段都會以括弧括住的區段名稱開頭, ([ ]) 。 區段名稱可以是系統定義或 INF 寫入器定義。

    例如, [Manufacturer] 會指定系統命名的 Manufacturer 區段的開頭, 而 [Std.Manufacturer] 則代表特定的 INF 寫入器定義 Models 區段名稱。

    區段名稱在 Windows 2000 和更新版本的 Windows 上長度上限為 255 個字元。

    每個區段都會以新的 [section-name] 開頭或檔案結尾標記結尾結束。

  • 如果 INF 檔案中的多個區段具有相同的名稱,系統會將其專案和指示詞合併成單一區段。

  • 除非以雙引號字元括住 「 (」) ,否則 INF 寫入器定義的區段名稱必須是明確可見字元的唯一對 INF 未加上引號字串,不包括具有 INF 特定意義的特定字元。 特別是,區段專案或指示詞所參考的未加上引號的區段名稱不能有開頭或尾端空格、換行字元、傳回字元或任何不可見的控制字元,而且不應該包含索引標籤。 此外,它不能包含方括弧 ([ ]) 字元、單一百分比 (%) 字元、分號 (;) 或任何內部雙引號 () 字元,而且不能有反斜線 (\) 做為其最後一個字元。

    例如,Std.在 INF 檔案專案或指示詞參考時,Std.在Std_Mfg是唯一且有效的區段名稱,但 Std;除非以雙引號括住 () ,否則 (及其內部分號) 無效。

    將 INF-writer 定義的區段名稱指定為 引號字串 ,會覆寫先前在參考區段名稱中的字元所描述的大部分限制。 只要 INF 檔案中的對應區段完全符合這個引號字串,這類分隔區段名稱可以包含幾乎任何明確或隱含可見的字元,但右括弧 (]除外) 。

    例如,「;;如果 INF 檔案中的對應區段宣告完全符合其空格和分號字元為[;;Std 一元]

使用字串權杖

  • INF 檔案中的許多值,包括 INF 寫入器定義的區段名稱,可以表示為格式 %strkey的字串索引鍵 % 標記。 在 INF 檔案的 INF 字串區 段中,每個字串索引鍵都必須與由明確可見字元序列組成的字串值相關聯。 如有必要,安裝程式程式碼會將字串值轉換成 Unicode。

    如需如何定義 %strkey% 標記及其個別值的詳細資訊,請參閱INF 字串的描述一節。

行格式、接續和批註

  • 區段中的每個專案和指示詞都會以傳回字元或換行字元結尾。 因此,用來建立 INF 檔案的文字編輯器不得在一些任意且由編輯器決定的字元數之後插入傳回字元或換行字元。

  • 反斜線字元 (\) 可作為專案或指示詞中的明確行持續性子。 不過,反斜線字元也會用於路徑規格中。 若要確保出現在路徑規格中的反斜線字元不會誤譯為行持續性程式,請使用下列策略:

    • 對於跨越兩行的指示詞,其中一個是包含反斜線的專案,請使用引號分隔包含反斜線的專案。

      CopyFiles = "SomeDirectory\"\
      ,SomeFile
      
    • 請避免以下列範例所示的方式使用反斜線字元。 Windows 會忽略第一個反斜線,並將第二個反斜線解譯為行持續性程式。

      CopyFiles = SomeDirectory\\
      ,SomeFile
      
    • 下列語法有效,相當於 CopyFiles = "SomeDirectory\",SomeFile ; comment

      CopyFiles = "SomeDirectory\"\ ; comment 
      ,SomeFile
      

      因為會忽略分號之後的文字, CopyFiles = "SomeDirectory\" ; comment ,SomeFile 所以無法運作。

  • 批註開頭為分號 (;) 字元。 剖析和解譯 INF 檔案時,系統會假設下列專案與安裝程式無關:

    • 除非分號出現在quoted string%strkey% Token 中,否則相同行上分號之後的任何字元
    • 除了換行字元或傳回字元以外,任何包含任何空白行的行
  • 逗號會分隔區段專案和指示詞中提供的值。

    INF 檔案專案或指示詞可以省略值清單中間的選擇性值,但逗號必須保留。 INF 檔案可以省略尾端逗號。

    例如,請考慮 SourceDisksFiles 區段專案的語法:

    檔案名=diskid[[subdir][size]]

    省略 subdir 值但提供 size 值的專案必須同時指定這兩個值的逗號分隔符號,如下列範例所示:

    檔案名=diskid,,size

    INF 檔案中省略兩個選擇性值的專案可以有下列格式:

    檔案名=diskid

  • 若要在區段專案和指示詞中提供的值中包含百分比 (%) 字元,請使用另一個百分比字元逸出百分比字元。

    例如,請在 [add-registry-section] 區段中 考慮此語句:

    HKR,EventMessageFile,0x00020000,「%%SystemRoot%%\System32\IoLogMsg.dll」

    登錄值將會使用下列值來設定:

    %SystemRoot%\System32\IoLogMsg.dll

  • 若要在區段專案和指示詞中提供的值中包含雙引號 (「) 字元,請使用另一個雙引號字元逸出雙引號字元。 請注意,字串必須位於 引號字串內。

    例如,請在 [add-registry-section] 區段中 考慮此語句:

    HKR,範例,「顯示 」example「」 字串」

    登錄值將會使用下列值來設定:

    顯示 「example」 字串

INF 大小限制

  • 字串替代之前,INF 檔案欄位的最大長度,以字元為單位,包含終止的 Null 字元為 4096。

  • 字串替代之後,INF 檔案字串的最大長度,以字元為單位為 4096,其中包含終止的 Null 字元。

  • 不過請注意,隨插即用 (PnP) 可能會對可辨識或使用的特定 INF 檔案欄位施加更嚴格的限制,例如裝置描述、驅動程式提供者和裝置製造商。