Проверка синтаксиса INF файла
Отладка inf-файлов не является простой задачей. В состав DDK входит утилита CHKINF, служащая для проверки правильности синтаксиса и организации inf-файлов, и ее можно найти в подкаталоге Tools каталога DDK. Она опирается на интерпретатор Perl, который доступен для загрузки с интернет-сайта perl.com. Вывод результатов выполняется в форме HTML файла. Хотя нельзя не признать определенные достоинства этой утилиты, тем не менее, как указывают многие источники, она выдает ошибки при проверке вполне нормальных inf-файлов.
Установив ActivePerl интерпретатор, загруженный с сайта activestate.com, и запустив его командой из директории пакета DDK \tools\chkinf
chkinf.bat path\Example.inf /b
где path — это путь к проверяемому inf-файлу, ключ /b обеспечивает автозапуск IE (Internet Explorer) для просмотра результатов, получаем результаты проверки в окне IE, см. рисунок 12.5.
Текстовый вариант до исправления некоторых погрешностей выглядел следующим образом:
Summary of "k:\Ex\Example.inf" Total Errors: 2 Total Warnings: 6 ________________________________________________________________
Errors: Line 5: (E22.1.1081) Directive: CatalogFile required (and must not be blank) in section [Version] for WHQL digital signature. Line 11: (E22.1.1310) Class ExampleDrvClass (ClassGUID {DC16BE99-C06B-4801-A144-43A98BB99052}) is unrecognized.
________________________________________________________________
Warnings: Line 0: (W22.1.2212) No Copyright information found. Line 34: (W22.1.2023) Use a string token, and put localizable text in the [Strings] section. Line 45: (W22.1.2208) NT-specific section(s) found. Ignoring general section. Line 45: (W22.1.2083) Section [EXAMPLE.INSTALL] not referenced Line 49: (W22.1.2083) Section [EXAMPLE.ADDREG] not referenced Line 53: (W22.1.2083) Section [EXAMPLE.FILES.DRIVER] not referenced
Первая ошибка (E22.1.1081) обусловлена тем, что отсутствует .cat файл, где содержится подписанный Microsoft инсталляционный пакет.
Вторая ошибка (E22.1.1310) обусловлена тем, что утилита CHKINF
не отреагировала на секции и директивы установки нового класса устройств ExampleDrvClass (к тому же, к моменту проверки новый класс уже находился в Системном Реестре). Можно заменить класс на Unknown, но тогда утилита CHKINF будет "недовольна" тем, что это — устаревший класс. Если попробовать ввести класс USB, то утилита CHKINF будет вполне "удовлетворена", хотя не отследит неверный формат идентификатора модели (неверный для USB устройства, см. ниже), который задан здесь как "*svpBook\Example". Это лишний раз подтверждает тот факт, что CHKINF проверяет только базисные правила синтаксиса и структуры inf-файлов.
Предупреждения тоже имеют несложные объяснения.
Первое (W22.1.2212) указывает на то, что в inf-файле нет записи copyright. Исправляется этот недостаток следующим образом:
; Example.Inf - install information file ; Created 22 feb 2002 by SVP ; Copyright (c) SVP 2003. All rights reserved.
Последняя строка, которая добавлена для устранения данного предупреждения, хотя формально и является комментарием, но считается информативной относительно авторских прав (содержит ключевые слова Copyright (c)).
Второе предупреждение (W22.1.2023) указывает:
[SourceDisksNames] 1="Example build directory",,, ; (W22.1.2023) Use a string token, and put localizable text ; in the [Strings] section.
To есть рекомендуется заменить строку "Example build directory" на маркер, значение которого следует раскрыть в секции [Strings], например, следующим образом:
[SourceDisksNames] 1=%ExamDir%,,,
[Strings] . . . ; Раскрываем значение нового маркера ExamDir="Example build directory"
Третье предупреждение (W22.1.2208) информирует, что в файле найдены секции для операционной системы NT, поэтому стандартные секции (для Windows 98) будут проигнорированы.
Оставшиеся предупреждения даны потому, что указанные секции (введенные для использования в Windows 98) проигнорированы, соответственно, на них нет ни одной ссылки.
Рис. 12.5. Результаты работы CHKINF (после исправлений) |