Программирование драйверов Windows

       

Проверка синтаксиса 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 &#8212 это путь к проверяемому 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 будет "недовольна" тем, что это &#8212 устаревший класс. Если попробовать ввести класс 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 (после исправлений)
В пакете DDK в подкаталоге Tools имеется также утилита GENINF.EXE, которая облегчает создание inf-файлов, но более всего подходит для изучения процесса их создания и может оказать некоторую помощь начинающим разработчикам.


Содержание раздела