INF ファイルは、名前付きセクションに編成されたテキスト ファイルです。 一部のセクションにはシステム定義の名前があり、一部のセクションには INF ファイルのライターによって決定される名前があります。
各セクションには、デバイスのインストール コンポーネントによって解釈されるセクション固有のエントリが含まれています。 一部のエントリは、定義済みのキーワードで始まります。 これらのエントリは ディレクティブと呼ばれます。
一部の INF ファイル エントリは、基本的に特定の目的のために、あるセクションから別のセクションへのポインターです。 たとえば、INF AddReg ディレクティブは、レジストリを変更するようにWindowsに指示するエントリを含むセクションを識別します。 これらのエントリには、インストール時に Windows が解釈する追加引数 (必須または省略可能) が含まれる場合があります。
他の INF ファイル エントリは他のセクションを指していませんが、Windows がインストール時に使用する情報 (ファイル名、レジストリ値、ハードウェア構成情報、フラグなど) を提供します。 たとえば、INF DriverVer ディレクティブはドライバー バージョン情報を提供します。
Windowsがインストールを開始すると、最初に INF バージョン セクションを探して INF ファイルの有効性を確認します。 次に、 INF Manufacturer セクションを見つけてインストールを開始します。 このセクションには INF Models セクションへのディレクティブが含まれています。これらのセクションは、インストールされるデバイスのハードウェア 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] はシステム名の Manufacturer セクションの先頭を指定し、[Std.Mfg] は特定の INF ライター定義の Models セクション名を表します。
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 Strings セクションでは、各文字列キーは、明示的に表示される文字のシーケンスで構成される文字列値に関連付ける必要があります。 必要に応じて、セットアップ コードによって文字列値が 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"
レジストリ値は、次の値で設定されます。
"example" 文字列を表示する
INF サイズの制限
INF ファイル フィールドの文字列置換前の最大長 (文字数) は、終端の NULL 文字を含めて 4096 です。
文字列の置換後、INF ファイル文字列の最大長 (文字数) は 4096 で、終端の NULL 文字が含まれます。
ただし、プラグ アンド プレイ (PnP) では、デバイスの説明、ドライバー プロバイダー、デバイスの製造元など、認識または使用する特定の INF ファイル フィールドに対して、より制限の厳しい制限が課される場合があることに注意してください。