INF ファイルの一般的な構文規則
INF ファイルは、名前付きのセクションに編成されたテキストファイルです。 一部のセクションにはシステム定義の名前があり、一部のセクションには INFファイルのライターによって決定される名前があります。
各セクションには、デバイスのインストール コンポーネントによって解釈されるセクション固有のエントリが含まれています。 一部のエントリは、定義済みのキーワードで始まります。 これらのエントリは ディレクティブと言います。
一部の INFファイル エントリは基本的に、特定の目的のための、セクション間のポインターです。 たとえば、INF AddRegディレクティブ は、レジストリを変更するように Windows に指示するエントリを含むセクションを識別します。 これらのエントリには、インストール時に Windows が解釈する追加の引数(必須または任意)が含まれる場合があります。
他の INFファイル エントリは他のセクションを指していませんが、ファイル名、レジストリ値、ハードウェア構成情報、フラグなど、Windows がインストール時に使用する情報を提供します。 例えば、INF DriverVer ディレクティブ は、ドライバーのバージョン情報を提供します。
Windows がインストールを開始すると、最初に INFバージョン セクション が検索され、INFファイルの有効性が確認されます。 次に、INF Manufacturer section セクションを見つけてインストールを開始します。 このセクションには、INF モデル セクションへのディレクティブが含まれており、このセクションでは、インストールされているデバイスのハードウェア ID に基づいて、さまざまな INF DDInstall セクションにつながるディレクティブを提供します。
次の構文規則は、INFファイルの必須および省略可能な内容、文字列トークンを使用したセクション名の形式、および行形式、継続、コメントを制御します。
大文字と小文字の区別
- セクション名、エントリ、およびディレクティブでは、大文字と小文字が区別されません。 たとえば、 version、 VERSION、および Version は、INF ファイル内で同じように有効なセクション名の仕様です。
必須および任意のコンテンツ
特定の INF ファイル内の必須および省略可能なセクション、エントリ、ディレクティブの一式は、インストールするデバイス/ドライバーまたはコンポーネントの種類によって異なります。
特定のデバイスとそのドライバーをインストールするために必要なセクション、セクション固有のエントリ、ディレクティブの一式も、対応するクラスインストーラー (存在する場合) によって多少異なります。 システム提供のクラスインストーラーがデバイスの種類固有の INFファイルを処理する方法の詳細については、WDKデバイスの種類固有の文書を参照してください。
構文定義内では、任意のエントリは、 非ボールド体 の角かっこ ([,])で区切られます。 一方、 太字 の角かっこ ([, ])は、それらが含まれているエントリの必須要素です。 次の例では、Version の周りにかっこが必要ですが、Class=class-name のかっこは、このエントリが任意であることを示しています。
[Version] Signature="signature-name" [Class=class-name] ...
セクション名
セクションは任意の順序で指定できます。 ほとんどの INF ァイルでは、規則に従って特定の順序でセクションが一覧表示されますが、Windows は INFファイル内の場所ではなく、名前でセクションを検索します。
INFファイル内の各セクションは、かっこ ([ ]) で囲まれたセクション名で始まります。 セクション名には、システム定義または INFライター定義を指定できます。
例えば、 [Manufacturer] はシステム名 製造業者 セクションの先頭を指定し、 [[Std.Mfg] は特定の INFライター定義 モデル セクション名を表します。
Windows 2000 以降のバージョンの Windows では、セクション名の最大長は 255 文字です。
各セクションは、新規 [section-name] の先頭またはファイルの末尾で終わります。
INFファイル内の複数のセクションの名前が同じである場合、システムはエントリとディレクティブを1つのセクションに統合します。
二重引用符 (") で囲まれていない限り、INFライター定義のセクション名は、INF固有の意味を持つ特定の文字を除き、明示的に表示される文字の一意の INF引用符で囲まれていない文字列である必要があります。 特に、セクションエントリまたはディレクティブによって参照される引用符で囲まれていないセクション名には、先頭または末尾のスペース、改行文字、戻り文字、または非表示の制御文字を含めることはできず、タブを含めることもできません。 さらに、かっこ([ ])文字、1 パーセント (%) 文字、セミコロン (;)、または内部二重引用符 (") 文字を含めることはできず、最後の文字としてバックスラッシュ (\) を使用することもできません。
例えば、STD.Mfg と Std_Mfg は、INFファイルのエントリまたはディレクティブによって参照される場合は一意で有効なセクション名ですが、Std です。Mfg (内部セミコロンを含む) は、二重引用符 (") で囲まれている場合を除き、無効です。
INF ライターで定義されたセクション名を "引用符で囲まれた文字列" として指定すると、参照されるセクション名の文字に関して以前に説明した制限の大部分がオーバーライドされます。 このような区切りセクション名には、INF ファイル内の対応するセクションがこの "引用符で囲まれた文字列" と正確に一致する限り、終わりかっこ (]) を除く、明示的または暗黙的に表示されるほぼすべての文字を含めることができます。
例えば、 ";; Std Mfg " は、INFファイル中の対応するセクション宣言が、 [;; Std Mfg ]のように、二重引用符の中の名前と、スペースとセミコロンが正確に一致する場合に、有効なセクション名参照です。
文字列トークンの使用
INF ライターで定義されたセクション名など、INF ファイル内の多くの値は、フォーム %strkey% の文字列キートークンとして表すことができます。 INF ファイルの INF 文字列 セクションでは、各文字列キーは、明示的に表示される文字のシーケンスで構成される文字列値に関連付ける必要があります。 必要に応じて、セットアップコードによって文字列値がUnicodeに変換されます。
%strkey% トークンとそのそれぞれの値を定義する方法の詳細については、 INF 文字列セクションセクションの記述を参照してください。
行の形式、継続、およびコメント
セクション内の各エントリとディレクティブは、戻り値または改行文字で終わります。 そのため、INF ファイルの作成に使用されるテキストエディターでは、エディターによって決められた任意の文字数の後に戻り文字または改行文字を挿入しないでください。
円記号 (\) は、エントリまたはディレクティブの明示的な行コンティニュエーターとして使用できます。 ただし、バックスラッシュはパス仕様でも使用されます。 パス指定に表示されるバックスラッシュが行コンティニュエーターとして誤って解釈されないようにするには、次の方法を使用します。
2 行にまたがるディレクティブ (そのうちの 1 つはバックスラッシュを含むエントリ) の場合は、引用符を使用してバックスラッシュを含むエントリを区切ります。
CopyFiles = "SomeDirectory\"\ ,SomeFile
バックスラッシュは、次の例に示すように使用しないでください。 Windows は最初のバックスラッシュを無視し、2 番目のバックスラッシュを行コンティニュエーターとして解釈します。
CopyFiles = SomeDirectory\\ ,SomeFile
次の構文は有効であり、
CopyFiles = "SomeDirectory\",SomeFile ; comment
に相当します。CopyFiles = "SomeDirectory\"\ ; comment ,SomeFile
セミコロンの後のテキストは無視されるため、
CopyFiles = "SomeDirectory\" ; comment ,SomeFile
は機能しません。
コメントはセミコロン (;) 文字で始まります。 INF ファイルを解析して解釈する場合、システムは次のことがインストールプロセスに関連していないと想定します。
- "引用符で囲まれた文字列" または %strkey% トークン内にセミコロンが含まれていない限り、同じ行のセミコロンの後に続く任意の文字
- 改行文字または戻り文字以外の何も含まれていない空の行
カンマは、セクションのエントリとディレクティブで指定された値を区切ります。
INFファイルのエントリまたはディレクティブは、値の一覧の途中で任意の値を省略できますが、カンマは残る必要があります。 INF ファイルでは、末尾のカンマを省略できます。
例えば、 SourceDisksFiles セクション エントリの構文について考察します。
filename=diskid[,[subdir][,size]]
次の例に示すように、 subdir 値を省略し、 サイズ 値を指定するエントリでは、両方の値のカンマ区切り記号を指定する必要があります。
filename=diskid,,size
2 つの任意の値を省略する INF ファイルのエントリには、次の形式を使用できます。
filename=diskid
セクションのエントリとディレクティブで指定された値にパーセント文字を含めるには、パーセント文字を別のパーセント文字でエスケープします。
例えば、[add-registry-section] セクションで次のステートメントを考えてみます。
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll"
レジストリ値は、次の値で設定されます。
%SystemRoot%\System32\IoLogMsg.dll
セクションのエントリとディレクティブで指定された値に二重引用符 (") 文字を含めるには、二重引用符文字を別の二重引用符でエスケープします。 文字列は "引用符で囲まれた文字列" 内に含まれている必要があるので注意してください。
例えば、[add-registry-section] セクションで次のステートメントを考えてみます。
HKR,,Example,,"Display an "example"string"
レジストリ値は、次の値で設定されます。
「例」の文字列を表示する
INFサイズ制限
INFファイル フィールドの文字列置換前の最大文字数は、終端の NULL 文字を含めて4096文字です。
文字列の置換後、INFファイル文字列の最大文字数は終端の NULL 文字を含む4096文字です。
ただし、プラグ アンド プレイ (PnP) では、デバイスの説明、ドライバープロバイダー、デバイスの製造元など、認識または使用する特定の INFファイル フィールドに対して、より制限の厳しい制限が課される場合があることに注意してください。