Reglas de sintaxis general para archivos INF

Un archivo INF es un archivo de texto organizado en secciones con nombre. Algunas secciones tienen nombres definidos por el sistema y algunas secciones tienen nombres determinados por el autor del archivo INF.

Cada sección contiene entradas específicas de la sección que son interpretadas por los componentes de instalación del dispositivo. Algunas entradas comienzan con una palabra clave predefinida. Estas entradas se denominan directivas.

Algunas entradas de archivo INF son básicamente punteros de una sección a otra, para un propósito específico. Por ejemplo, una directiva AddReg INF identifica una sección que contiene entradas que indican a Windows modificar el registro. Estas entradas a veces incluyen argumentos adicionales (obligatorios o opcionales) para que Windows los interprete durante la instalación.

Otras entradas de archivo INF no apuntan a otras secciones, pero proporcionan información que Windows usa durante la instalación, como nombres de archivo, valores del Registro, información de configuración de hardware, indicadores, etc. Por ejemplo, una directiva INF DriverVer proporciona información de versión del controlador.

Cuando Windows comienza una instalación, primero busca una sección INF Version para comprobar la validez del archivo INF. Entonces comienza la instalación encontrando una sección Manufacturer de INF. Esta sección contiene directivas para las secciones Models INF, que a su vez proporcionan directivas que conducen a varias secciones de INF DDInstall, en función del identificador de hardware del dispositivo que se va a instalar.

Las siguientes reglas de sintaxis rigen el contenido obligatorio y opcional de los archivos INF, el formato de los nombres de sección mediante tokens de cadena, y el formato de las líneas, su continuación y los comentarios.

Distinción entre mayúsculas y minúsculas

  • Los nombres de sección, las entradas y las directivas no distinguen mayúsculas de minúsculas. Por ejemplo, version, VERSION y Version son especificaciones de nombre de sección igualmente válidas dentro de un archivo INF.

Contenido obligatorio y opcional

  • El conjunto de secciones, entradas y directivas obligatorias y opcionales de cualquier archivo INF determinado depende del tipo de dispositivo o controlador o componente que se va a instalar.

  • El conjunto de secciones, entradas específicas de sección y directivas necesarias para instalar cualquier dispositivo determinado y sus controladores también depende algo del instalador de clase correspondiente, si existe uno. Para obtener más información sobre cómo los instaladores de clase proporcionados por el sistema administran los archivos INF específicos del tipo de dispositivo, consulte la documentación específica del tipo de dispositivo en WDK.

  • Dentro de las definiciones de sintaxis, las entradas opcionales se delimitan por corchetes sin negrita ([,]). Por otra parte, los corchetes en negrita (, ) son elementos obligatorios de la entrada en la que están contenidos. En el ejemplo siguiente, se requieren corchetes alrededor de Version, mientras que los corchetes alrededor de Class=class-name indican que esta entrada es opcional.

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

Nombres de sección

  • Las secciones se pueden especificar en cualquier orden. La mayoría de los archivos INF enumeran secciones en un orden determinado, por convención, pero Windows busca secciones por nombre, no por ubicación dentro del archivo INF.

  • Cada sección de un archivo INF comienza con el nombre de sección entre corchetes ([ ]). El nombre de sección puede ser definido por el sistema o definido por INF-writer.

    Por ejemplo, [Manufacturer] especifica el inicio de la sección Manufacturer con nombre del sistema, mientras [Std.Mfg] representa un nombre de sección Models concreto definido por el autor de INF.

    Un nombre de sección tiene una longitud máxima de 255 caracteres en Windows 2000 y versiones posteriores de Windows.

    Cada sección termina al principio de una nueva [nombre de sección] o en el indicador de fin de archivo (EOF).

  • Si más de una sección de un archivo INF tiene el mismo nombre, el sistema combina sus entradas y directivas en una sola sección.

  • A menos que esté entre comillas dobles ("), un nombre de sección definido por el autor de INF debe ser una cadena única dentro del INF, sin comillas, compuesta por caracteres explícitamente visibles, excluyendo determinados caracteres con significados específicos de INF. En concreto, un nombre de sección sin comillas al que hace referencia una entrada o directiva de sección no puede tener espacios iniciales o finales, un carácter de avance de línea, un carácter de retorno o cualquier carácter de control invisible y no debe contener pestañas. Además, no puede contener ninguno de los caracteres de corchete ([ ]), un carácter de un solo porcentaje (%), un punto y coma (;), ni ningún carácter interno de comillas dobles (") y no puede tener una barra diagonal inversa (\) como último carácter.

    Por ejemplo, Std.Mfg y Std_Mfg son nombres de sección únicos y válidos cuando se hace referencia a ellos desde una entrada o directiva de un archivo INF, pero Std;Mfg (con su punto y coma interno) no es válido a menos que esté entre comillas dobles ().

    Especificar un nombre de sección definido por el autor del INF como una "cadena entre comillas" anula la mayoría de las restricciones que se describieron anteriormente sobre los caracteres de los nombres de sección a los que se hace referencia. Este nombre de sección delimitado puede contener casi cualquier carácter visible explícita o implícitamente, excepto el corchete de cierre (]) siempre que la sección correspondiente del archivo INF coincida exactamente con esta "cadena entre comillas".

    Por ejemplo, ";; Std Mfg " es una referencia válida de nombre de sección si la declaración de sección correspondiente en el archivo INF coincide exactamente con el nombre dentro de las comillas dobles con respecto a sus caracteres de espacio y punto y coma como [;; Std Mfg ].

Uso de tokens de cadena

  • Muchos valores en un archivo INF, incluidos los nombres de sección definidos por el redactor del INF, pueden expresarse como tokens de clave de cadena con el formato %strkey%. En la sección INF Strings del archivo INF, cada clave de cadena debe estar asociada a un valor de cadena que consta de una secuencia de caracteres visibles explícitamente. Si es necesario, el código de instalación convierte el valor de cadena en Unicode.

    Para obtener más información sobre cómo definir % tokens strkey% y sus respectivos valores, consulte la descripción de la sección Cadenas INF.

Formato de línea, continuación y comentarios

  • Cada entrada y directiva de una sección termina con un carácter de retorno o salto de línea. Por lo tanto, el editor de texto usado para crear un archivo INF no debe insertar caracteres de retorno o de salto de línea después de un número arbitrario de caracteres determinado por el editor.

  • El carácter de barra diagonal inversa (\) se puede usar como un continuador de línea explícito en una entrada o directiva. Sin embargo, los caracteres de barra diagonal inversa también se usan en las especificaciones de ruta de acceso. Para asegurarse de que un carácter de barra invertida que aparece en una especificación de ruta de acceso no se malinterpreta como un continuador de línea, use la siguiente estrategia:

    • Para una directiva que abarca dos líneas, una de las cuales es una entrada que contiene una barra diagonal inversa, use comillas para delimitar la entrada que contiene la barra diagonal inversa.

      CopyFiles = "SomeDirectory\"\
      ,SomeFile
      
    • Evite usar el carácter de barra diagonal inversa de la manera que se muestra en el ejemplo siguiente. Windows omite la primera barra diagonal inversa e interpreta la segunda barra diagonal inversa como una continuación de línea.

      CopyFiles = SomeDirectory\\
      ,SomeFile
      
    • La sintaxis siguiente es válida y es equivalente a CopyFiles = "SomeDirectory\",SomeFile ; comment.

      CopyFiles = "SomeDirectory\"\ ; comment 
      ,SomeFile
      

      Dado que el texto después de un punto y coma se omite, CopyFiles = "SomeDirectory\" ; comment ,SomeFile no funciona.

  • Los comentarios comienzan con un carácter de punto y coma (;). Al analizar e interpretar un archivo INF, el sistema asume que lo siguiente no tiene relevancia para el proceso de instalación:

    • Cualquier carácter que siga a un punto y coma en la misma línea, a menos que el punto y coma aparezca dentro de una "cadena citada" o %strkey%.
    • Cualquier línea vacía que solo contenga un carácter de salto de línea o de retorno
  • Las comas separan los valores proporcionados en las directivas y entradas de sección.

    Una entrada o directiva de archivo INF puede omitir un valor opcional en medio de una lista de valores, pero las comas deben permanecer. Los archivos INF pueden omitir comas finales.

    Por ejemplo, considere la sintaxis de una entrada de sección SourceDisksFiles :

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

    Una entrada que omite el valor de subdir , pero que proporciona el valor de tamaño debe especificar los delimitadores de coma para ambos valores, como se muestra en el ejemplo siguiente:

    filename=diskid,,size

    Una entrada en un archivo INF que omite los dos valores opcionales puede tener este formato:

    filename=diskid

  • Para incluir un carácter de porcentaje (%) en los valores proporcionados en las entradas y directivas de sección, escape el carácter de porcentaje con otro carácter de porcentaje.

    Por ejemplo, considere esta declaración en una sección [add-registry-section]:

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

    El valor del Registro se establecerá con el siguiente valor:

    %SystemRoot%\System32\IoLogMsg.dll

  • Para incluir un carácter de comilla doble (") en los valores proporcionados en las entradas y directivas de sección, escape el carácter de comilla doble con otro carácter de comilla doble. Tenga en cuenta que la cadena debe estar dentro de una "cadena entre comillas".

    Por ejemplo, considere esta instrucción en una sección [add-registry-section]:

    HKR,,Ejemplo,, "Mostrar una cadena de ""ejemplo"

    El valor del Registro se establecerá con el siguiente valor:

    Mostrar una cadena "example"

Límites de tamaño de INF

  • La longitud máxima, en caracteres, de un campo de archivo INF, antes de la sustitución de cadenas y con inclusión de un carácter NULL de terminación, es 4096.

  • Después de la sustitución de cadenas, la longitud máxima, en caracteres, de una cadena de archivo INF es 4096, que incluye un carácter NULL de terminación.

  • Sin embargo, tenga en cuenta que Plug and Play (PnP) puede imponer un límite más restrictivo para determinados campos de archivo INF que reconoce o usa, como la descripción del dispositivo, el proveedor de controladores y el fabricante del dispositivo.