Общие правила синтаксиса для ФАЙЛОВ INF

INF-файл — это текстовый файл, упорядоченный по именованным разделам. Некоторые разделы имеют системные имена, а некоторые — имена, определяемые модулем записи INF-файла.

Каждый раздел содержит записи, относящиеся к разделу, которые интерпретируются компонентами установки устройства. Некоторые записи начинаются с предопределенного ключевое слово. Эти записи называются директивами.

Некоторые записи INF-файла по сути являются указателями из одного раздела в другой для определенной цели. Например, директива INF AddReg определяет раздел, содержащий записи, которые предписывают Windows изменить реестр. Иногда эти записи включают дополнительные аргументы (обязательные или необязательные) для интерпретации Windows во время установки.

Другие записи INF-файла не указывают на другие разделы, но предоставляют сведения, которые Windows использует во время установки, например имена файлов, значения реестра, сведения о конфигурации оборудования, флаги и т. д. Например, директива INF DriverVer предоставляет сведения о версии драйвера.

Когда Windows начинает установку, она сначала ищет раздел INF-версии , чтобы проверить допустимость INF-файла. Затем он начинает установку, найдя раздел INF Manufacturer. Этот раздел содержит директивы для разделов МОДЕЛИ INF, которые, в свою очередь, предоставляют директивы, ведущие к различным разделам INF DDInstall на основе идентификатора оборудования устанавливаемого устройства.

Следующие правила синтаксиса управляют обязательным и необязательным содержимым INF-файлов, форматом имен разделов с помощью токенов строки, а также форматом строк, продолжением и комментариями.

Чувствительность к регистру

  • Имена разделов, записи и директивы не учитывают регистр. Например, version, VERSION и Version являются одинаково допустимыми спецификациями имен разделов в INF-файле.

Обязательное и необязательное содержимое

  • Набор обязательных и необязательных разделов, записей и директив в любом конкретном INF-файле зависит от типа устанавливаемого устройства, драйвера или компонента.

  • Набор разделов, записей раздела и директив, необходимых для установки любого конкретного устройства и его драйверов, также зависит от соответствующего установщика класса, если таковой существует. Дополнительные сведения о том, как установщики класса, предоставляемые системой, обрабатывают INF-файлы, относящиеся к устройству, см. в документации по конкретному типу устройства в WDK.

  • В определениях синтаксиса необязательные записи разделяются необязательными скобками ([,]). С другой стороны, полужирные скобки ([, ]) являются обязательными элементами записи, в которой они содержатся. В следующем примере квадратные скобки вокруг Version являются обязательными, а квадратные скобки вокруг=class-name указывают, что эта запись необязательна.

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

Имена разделов

  • Разделы можно указать в любом порядке. Большинство INF-файлов перечисляют разделы в определенном порядке по соглашению, но Windows находит разделы по имени, а не по расположению в INF-файле.

  • Каждый раздел в INF-файле начинается с имени раздела, заключенного в квадратные скобки ([ ]). Имя раздела может быть системным или inf-writer-определяемым.

    Например, [Manufacturer] указывает начало раздела с системным именем Manufacturer , а [Std.Mfg] — определенное имя раздела Models , определенное с помощью модуля записи INF.

    Длина имени раздела не должна превышать 255 символов в Windows 2000 и более поздних версиях Windows.

    Каждый раздел заканчивается в начале нового [имя_раздела] или в конце файла.

  • Если несколько разделов в INF-файле имеют одинаковые имена, система объединяет их записи и директивы в один раздел.

  • Если оно не заключено в двойные кавычки ("), имя раздела, определяемое inf-writer, должно быть уникальной строкой без кавычек без кавычек явно видимых символов, за исключением определенных символов с определенными значениями INF. В частности, имя раздела без кавов, на которые ссылается запись раздела или директива, не может содержать начальные или конечные пробелы, символ перевода строк, символ возврата или любой невидимый управляющий символ, и оно не должно содержать вкладок. Кроме того, он не может содержать символы в скобках ([ ]), один процент (%), точку с запятой (;) или любые внутренние двойные кавычки (") и не может иметь обратную косую черту (\) в качестве последнего символа.

    Например, Std.Mfg и Std_Mfg являются уникальными и допустимыми именами разделов, если на них ссылается запись или директива INF-файла, но Std; Mfg (с внутренней точкой с запятой) недопустим, если он не заключен в двойные кавычки (").

    Указание имени раздела, определенного inf-writer, в качестве "строки в кавычках" , переопределяет большинство ограничений, описанных ранее для символов в именах разделов, на которые ссылается ссылка. Такое имя раздела с разделителями может содержать практически любые явно или неявно видимые символы, за исключением закрывающей скобки (]), если соответствующий раздел в INF-файле точно соответствует этой "строке в кавычках".

    Например, ";; Std Mfg " является допустимой ссылкой на имя раздела, если соответствующее объявление раздела в INF-файле точно соответствует имени в двойных кавычках относительно его пробела и символов точки с запятой как [; Std Mfg ].

Использование строковых маркеров

  • Многие значения в INF-файле, включая имена разделов, определяемые inf-writer, могут быть выражены в виде маркеров ключа строки формы %strkey%. В разделе INF Strings INF-файла каждый ключ строки должен быть связан со строковым значением, состоящим из последовательности явно видимых символов. При необходимости код установки преобразует строковое значение в Юникод.

    Дополнительные сведения об определении % маркеров strkey% и их соответствующих значений см. в описании раздела Inf Strings.

Формат строки, продолжение и комментарии

  • Каждая запись и директива в разделе заканчивается символом return или linefeed. Таким образом, текстовый редактор, используемый для создания INF-файла, не должен вставлять символы возврата или перевода строк после некоторого произвольного количества символов, определенного редактором.

  • Символ обратной косой черты (\) можно использовать в качестве явного континуатора строки в записи или директиве. Однако символы обратной косой черты используются также в спецификациях пути. Чтобы символ обратной косой черты, отображаемый в спецификации пути, не был неправильно интерпретирован как континуатор строки, используйте следующую стратегию:

    • Для директивы, охватывающей две строки, одна из которых является записью, содержащей обратную косую черту, используйте кавычки, чтобы разделять запись, содержащую обратную косую черту.

      CopyFiles = "SomeDirectory\"\
      ,SomeFile
      
    • Не используйте символ обратной косой черты, как показано в следующем примере. Windows игнорирует первую обратную косую черту и интерпретирует вторую обратную косую черту как континуатор линии.

      CopyFiles = SomeDirectory\\
      ,SomeFile
      
    • Следующий синтаксис является допустимым и эквивалентен CopyFiles = "SomeDirectory\",SomeFile ; comment.

      CopyFiles = "SomeDirectory\"\ ; comment 
      ,SomeFile
      

      Поскольку текст после точки с запятой игнорируется, CopyFiles = "SomeDirectory\" ; comment ,SomeFile не работает.

  • Комментарии начинаются с точки с запятой (;). При анализе и интерпретации INF-файла система предполагает, что следующие элементы не имеют отношения к процессу установки:

    • Все символы, следующие за точкой с запятой в той же строке, если только точка с запятой не отображается в строке с кавычкамиили% маркере strkey%.
    • Любая пустая строка, которая не содержит ничего, кроме символа строки или возвращаемого символа
  • Запятые разделяют значения, указанные в разделах и директивах.

    Запись или директива INF-файла может опустить необязательное значение в середине списка значений, но должны остаться запятые. INF-файлы могут пропускать конечные запятые.

    Например, рассмотрим синтаксис для записи раздела SourceDisksFiles :

    Имени файла=diskid[,[subdir][,size]]

    Запись, которая пропускает значение поддира, но предоставляет значение размера , должна указывать разделители-запятые для обоих значений, как показано в следующем примере:

    Имени файла=diskid,,size

    Запись в INF-файле, которая пропускает два необязательных значения, может иметь следующий формат:

    Имени файла=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.

  • Однако имейте в виду, что Plug and Play (PnP) может налагать более строгое ограничение на определенные поля INF-файла, которые он распознает или использует, например описание устройства, поставщик драйверов и изготовитель устройства.