Règles générales de syntaxe pour les fichiers INF

Un fichier INF est un fichier texte organisé en sections nommées. Certaines sections ont des noms définis par le système et certaines sections ont des noms déterminés par l’auteur du fichier INF.

Chaque section contient des entrées spécifiques à une section interprétées par les composants d’installation de l’appareil. Certaines entrées commencent par un mot clé prédéfini. Ces entrées sont appelées directives.

Certaines entrées de fichier INF sont essentiellement des pointeurs d’une section vers une autre, à des fins spécifiques. Par exemple, une directive AddReg INF identifie une section qui contient des entrées qui indiquent à Windows de modifier le Registre. Ces entrées incluent parfois des arguments supplémentaires (obligatoires ou facultatifs) pour Windows à interpréter pendant l’installation.

Les autres entrées de fichier INF ne pointent pas vers d’autres sections, mais fournissent des informations que Windows utilise pendant l’installation, telles que les noms de fichiers, les valeurs de Registre, les informations de configuration matérielle, les indicateurs, etc. Par exemple, une directive INF DriverVer fournit des informations sur la version du pilote.

Lorsque Windows commence une installation, il recherche d’abord une section version INF pour vérifier la validité du fichier INF. Ensuite, il démarre l’installation en recherchant une section fabricant INF. Cette section contient des directives sur les sections modèles INF, qui fournissent à leur tour des directives menant à diverses sections DDInstall INF, en fonction de l’ID matériel de l’appareil en cours d’installation.

Les règles de syntaxe suivantes régissent le contenu obligatoire et facultatif des fichiers INF, le format des noms de section à l’aide de jetons de chaîne et le format de ligne, la continuation et les commentaires.

Respect de la casse

  • Les noms de section, les entrées et les directives ne sont pas sensibles à la casse. Par exemple, version, VERSION et Version sont des spécifications de nom de section également valides dans un fichier INF.

Contenu obligatoire et facultatif

  • L’ensemble des sections, entrées et directives obligatoires et facultatives dans n’importe quel fichier INF particulier dépend du type de périphérique/pilote ou composant à installer.

  • L’ensemble des sections, d’entrées spécifiques à une section et de directives requises pour installer un appareil particulier et ses pilotes dépend également un peu du programme d’installation de classe correspondant, s’il en existe un. Pour plus d’informations sur la façon dont les programmes d’installation de classes fournis par le système gèrent les fichiers INF spécifiques au type d’appareil, consultez la documentation spécifique au type d’appareil dans wdK.

  • Dans les définitions de syntaxe, les entrées facultatives sont délimitées par des crochets non gras ([,]). En revanche, les crochets en gras ([, ]) sont des éléments obligatoires de l’entrée dans laquelle ils sont contenus. Dans l’exemple suivant, les crochets autour de Version sont requis, tandis que les crochets autour de la Classe=class-name indiquent que cette entrée est facultative.

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

Noms des sections

  • Les sections peuvent être spécifiées dans n’importe quel ordre. La plupart des fichiers INF répertorient les sections dans un ordre particulier, par convention, mais Windows recherche les sections par nom, et non par emplacement dans le fichier INF.

  • Chaque section d’un fichier INF commence par le nom de la section entre crochets ([ ]). Le nom de la section peut être défini par le système ou par le rédacteur INF.

    Par exemple, [Fabricant] spécifie le début de la section Fabricant nommée par le système, tandis que [Std.Mfg] représente un nom particulier de section de Modèles défini par l’enregistreur INF.

    Un nom de section a une longueur maximale de 255 caractères sur Windows 2000 et versions ultérieures de Windows.

    Chaque section se termine au début d’une nouvelle [section-name] ou à la fin du fichier.

  • Si plusieurs sections d’un fichier INF ont le même nom, le système fusionne leurs entrées et directives en une seule section.

  • À moins qu’il ne soit placé entre guillemets doubles ("), un nom de section défini par le rédacteur INF doit être une chaîne non entre guillemets, propre à ce fichier INF, composée de caractères explicitement visibles, à l’exclusion de certains caractères ayant des significations spécifiques à l’INF. En particulier, un nom de section sans guillemets référencé par une entrée de section ou une directive ne peut pas avoir d’espaces de début ou de fin, un caractère de saut de ligne, un caractère de retour ou tout caractère de contrôle invisible, et il ne doit pas contenir d’onglets. En outre, il ne peut contenir aucun des crochets ([ ]), un seul caractère de pourcentage (%), un point-virgule ( ;) ou des guillemets doubles internes ("), et il ne peut pas avoir une barre oblique inverse (\) comme dernier caractère.

    Par exemple, Std.Mfg et Std_Mfg sont des noms de section uniques et valides lorsqu’ils sont référencés par une entrée ou une directive de fichier INF, mais Std;Mfg (avec son point-virgule interne) n’est pas valide, sauf s’il est placé entre guillemets doubles (").

    La spécification d’un nom de section défini par le rédacteur INF en tant que «chaîne entre guillemets» remplace la plupart des restrictions décrites précédemment sur les caractères dans les noms de section référencés. Un tel nom de section délimité peut contenir presque tous les caractères explicitement ou implicitement visibles, à l’exception du crochet fermant (]) tant que la section correspondante dans le fichier INF correspond exactement à cette «chaîne citée».

    Par exemple, ";; Std Mfg " est une référence de nom de section valide si la déclaration de section correspondante dans le fichier INF correspond exactement au nom à l’intérieur des guillemets doubles, y compris en ce qui concerne ses caractères d’espacement et de point-virgule, comme [;; Std Mfg ].

Utilisation de jetons de type chaîne

  • De nombreuses valeurs dans un fichier INF, y compris les noms de section définis par l’auteur du fichier INF, peuvent être exprimées en tant que jetons de clé de chaîne de la forme %strkey%. Dans la section INF Strings du fichier INF, chaque clé de chaîne doit être associée à une valeur de chaîne qui se compose d’une séquence de caractères explicitement visibles. Si nécessaire, le code d’installation convertit la valeur de chaîne en Unicode.

    Pour plus d’informations sur la façon de définir % des jetons strkey% et leurs valeurs respectives, consultez la description de la section Chaînes INF.

Format de ligne, continuation et commentaires

  • Chaque entrée et directive d’une section se terminent par un caractère de retour ou de saut de ligne. Par conséquent, l’éditeur de texte utilisé pour créer un fichier INF ne doit pas insérer de caractères de retour ou de saut de ligne après un nombre arbitraire de caractères fixé par l’éditeur.

  • Le caractère de barre oblique inverse (\) peut être utilisé comme continuateur de ligne explicite dans une entrée ou une directive. Toutefois, les caractères de barre oblique inverse sont également utilisés dans les spécifications de chemin d’accès. Pour vous assurer qu’un caractère de barre oblique inverse qui apparaît dans une spécification de chemin d’accès n’est pas mal interprété comme un continuateur de ligne, utilisez la stratégie suivante :

    • Pour une directive qui s’étend sur deux lignes, dont l’une est une entrée qui contient une barre oblique inverse, utilisez des guillemets pour délimiter l’entrée qui contient la barre oblique inverse.

      CopyFiles = "SomeDirectory\"\
      ,SomeFile
      
    • Évitez d’utiliser la barre oblique inverse de la manière indiquée dans l’exemple suivant. Windows ignore la première barre oblique inverse et interprète la deuxième barre oblique inverse en tant que continuateur de ligne.

      CopyFiles = SomeDirectory\\
      ,SomeFile
      
    • La syntaxe suivante est valide et équivaut à CopyFiles = "SomeDirectory\",SomeFile ; comment.

      CopyFiles = "SomeDirectory\"\ ; comment 
      ,SomeFile
      

      Étant donné que le texte après un point-virgule est ignoré, CopyFiles = "SomeDirectory\" ; comment ,SomeFile ne fonctionne pas.

  • Les commentaires commencent par un caractère point-virgule ( ;). Lors de l’analyse et de l’interprétation d’un fichier INF, le système suppose que les éléments suivants n’ont aucune pertinence pour le processus d’installation :

    • Tous les caractères qui suivent un point-virgule sur la même ligne, sauf si le point-virgule apparaît dans une «chaîne entre guillemets» ou dans un jeton %strkey%
    • Toute ligne vide qui ne contient rien à l’exception d’un saut de ligne ou d’un caractère de retour
  • Les virgules séparent les valeurs fournies dans les entrées et directives de section.

    Une entrée ou une directive de fichier INF peut omettre une valeur facultative au milieu d’une liste de valeurs, mais les virgules doivent rester. Les fichiers INF peuvent omettre les virgules de fin.

    Par exemple, considérez la syntaxe d’une entrée de section SourceDisksFiles :

    filename=diskid[,[subdir][,size]]

    Une entrée qui omet la valeur subdir, mais qui fournit la valeur size doit spécifier les délimiteurs de virgule pour les deux valeurs, comme illustré dans l’exemple suivant :

    nom de fichier=diskid,,taille

    Une entrée dans un fichier INF qui omet les deux valeurs facultatives peut avoir ce format :

    filename=diskid

  • Pour inclure un caractère pourcentage (%) dans les valeurs fournies dans les entrées et directives de section, échappez le caractère de pourcentage avec un autre caractère de pourcentage.

    Par exemple, considérez cette instruction dans une section [add-registry-section] :

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

    La valeur de Registre est définie avec la valeur suivante :

    %SystemRoot%\System32\IoLogMsg.dll

  • Pour inclure un guillemet double (") dans les valeurs fournies dans les entrées de section et les directives, échappez le guillemet double avec un autre guillemet double. Notez que la chaîne doit se trouver dans une «chaîne entre guillemets».

    Par exemple, considérez cette instruction dans une section [add-registry-section] :

    HKR,,Exemple,« Afficher une chaîne ""exemple"" »

    La valeur de registre sera définie avec la valeur suivante :

    Afficher une chaîne « exemple »

Limites de taille INF

  • La longueur maximale, en caractères, d’un champ de fichier INF, avant la substitution de chaînes et incluant un caractère NULL de fin, est 4096.

  • Après la substitution de chaîne, la longueur maximale, en caractères, d’une chaîne d’un fichier INF est 4096, qui inclut un caractère NULL de fin.

  • Toutefois, sachez que Plug-and-Play (PnP) peut imposer une limite plus restrictive pour certains champs de fichier INF qu’il reconnaît ou utilise, comme la description de l’appareil, le fournisseur de pilotes et le fabricant de périphériques.