Règles de syntaxe générales 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 d’autres ont des noms déterminés par l’enregistreur du fichier INF.

Chaque section contient des entrées spécifiques à une section qui sont 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, dans un but spécifique. 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) que Windows doit 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 lors de 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 l’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 pour les sections des modèles INF, qui fournissent à leur tour des directives menant à différentes sections INF DDInstall, 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, ainsi que le format de ligne, la continuation et les commentaires.

Respect de la casse

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

Contenu obligatoire et facultatif

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

  • L’ensemble de sections, d’entrées spécifiques à une section et de directives requises pour installer un périphérique particulier et ses pilotes dépend également quelque peu du programme d’installation de classe correspondant, le cas échéant. Pour plus d’informations sur la façon dont les programmes d’installation de classe 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 nonboldés ([,]). 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 obligatoires, tandis que les crochets autour de Class=class-name indiquent que cette entrée est facultative.

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

Noms de section

  • 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 INF-writer.

    Par exemple, [Manufacturer] spécifie le début de la section Fabricant nommée par le système, tandis que [Std.Mfg] représente un nom de section de modèles défini par INF-writer.

    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 de la marque de 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 l’enregistreur INF doit être une chaîne unique à l’INF sans guillemets de caractères explicitement visibles, à l’exclusion de certains caractères avec des significations spécifiques à INF. En particulier, un nom de section sans guillemet référencé par une entrée ou une directive de section 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 autre caractère de contrôle invisible, et il ne doit pas contenir d’onglets. En outre, il ne peut contenir aucun des caractères entre crochets ([ ]), un seul pourcent (%), 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 directive ou une entrée de fichier INF, mais Std; Mfg (avec son point-virgule interne) n’est pas valide, sauf s’il est entouré de guillemets doubles (« ).

    La spécification d’un nom de section défini par l’enregistreur 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 visibles explicitement ou implicitement à l’exception du crochet fermant (]) tant que la section correspondante dans le fichier INF correspond exactement à cette «chaîne entre guillemets».

    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 par rapport à son espace et à ses points-virgules comme [;; Std Mfg ].

Utilisation de jetons de chaîne

  • De nombreuses valeurs dans un fichier INF, y compris les noms de section définis par l’enregistreur INF, peuvent être exprimées sous forme de jetons de clé de chaîne de la forme %strkey%. Dans la section Chaînes INF 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 définition % des jetons strkey% et de 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 termine 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 déterminé par l’éditeur.

  • La barre oblique inverse (\) peut être utilisée 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é en tant que continuateur de ligne, utilisez la stratégie suivante :

    • Pour une directive qui s’étend sur deux lignes, dont l’une est une entrée contenant 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 comme un 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 qu’un point-virgule est ignoré, CopyFiles = "SomeDirectory\" ; comment ,SomeFile ne fonctionne pas.

  • Les commentaires commencent par un 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 % un jeton strkey%
    • Toute ligne vide qui ne contient rien d’autre qu’un saut de ligne ou un caractère de retour
  • Les virgules séparent les valeurs fournies dans les entrées de section et les directives.

    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 :

    Fichier=diskid[,[subdir][,size]]

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

    Fichier=diskid,,size

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

    Fichier=diskid

  • Pour inclure un caractère de pourcentage (%) dans les valeurs fournies dans les entrées de section et les directives, placez le caractère de pourcentage dans une séquence d’échappement 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, placez le guillemet double dans une séquence d’échappement 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 « "example" »

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

    Afficher une chaîne « example »

Limites de taille INF

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

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

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