3. Сборка драйвера.
Для сборки драйвера необходимо выполнить команду build из среды сборки. У этой команды существует большое количество вариантов параметров. Чаще всего требуется лишь один – “-cZ”. Этот параметр указывает, что перед компиляцией нужно удалить файлы, сгенерированные при предыдущей компиляции.
При отсутствии ошибок в зависимости от типа среды сборки будет создан каталог (objchk для Checked и objfre для Free), в котором будет находиться файл драйвера.
4. Проверка ошибок.
В случае обнаружения ошибок в среде сборки будет выдан список ошибок с указанием файлов и строк, где они были обнаружены.
5. Выход из среды сборки.
Для выхода из среды сборки используется команда exit.
Тестирование драйвера.
Виртуальная машина.
Для тестирования драйвера рекомендуется использовать виртуальную машину (например, Microsoft Virtual PC) с установленной на ней операционной системой той версии, на которой предполагается использование драйвера. Это позволит сохранить работоспособность основной системы при любых ошибочных действиях разрабатываемого драйвера.
Отладочная печать.
Для отладки драйвера удобно использовать в коде драйвера команды отладочной печати. Основными функциями отладочной печати являются DbgPrint () и KdPrint ().
Обе функции выводят отладочную информацию и обладают списком параметров идентичным функции printf(). Синтаксис второй функции (на самом деле, являющейся макросом) требует использования двойных скобочек. Ее вызов действует только при компиляции в среде сборки типа Checked.
Вызов DbgPrint() следует заключать в директивы условной компиляции (#if DBG).
Пример:
KdPrint((“отладочное сообщение”));
KdPrint((“строка с выводом значений: %s %d”, String, Number));
Для просмотра отладочной информации рекомендуется использовать утилиту DbgView от компании Sysinternals. На равнее с другими полезными утилитами, DbgView доступна для скачивания на официальном сайте компании: www.sysinternals.com.
Стоп-экран.
При запуске драйвера, содержащего ошибки, чаще всего происходит так называемый “крах системы”. При этом появляется стоп-экран, часто называемый BSOD – Blue Screen of Death.
По умолчанию в операционной системе установлена настройка, при которой после краха происходит автоматическая перезагрузка системы. Для отладки бывает полезно знать причину краха.
Последовательность действий:
1. зайти в Панель инструментов (Control Panel);
2. выбрать значок Система (System);
3. в появившемся окне Свойства системы (System properties) перейти на вкладку расширенных настроек (Advanced);
4. В группе Загрузка и восстановление (Startup and Recovery) нажать кнопку Настройка... (Settings...).
5. В группе Крах системы (System failure) снять галочку Автоматическая перезагрузка (Automatically restart).
6. Применить изменение настроек.
В описанном выше окне также есть полезная настройка – тип создаваемого при крахе дампа памяти. Если требуется создание дампа памяти, то необходимо выбрать в списке Запись отладочной информации (Write debugging information) тип дампа. При этом следует взвесить соотношение полноты информации и объема файла дампа.
При появлении стоп-экрана следует внимательно его изучить. Чаще всего системе удается определить “виновника” краха. В этом случае на экране, скорее всего, будет отображено имя сбойного драйвера. Иногда на экране выводится имя ошибки. Если имени ошибки нет, то следует обратить внимание на нижнюю часть экрана, где отображается численный код ошибки и четыре параметра в скобках.
Примеры названий ошибок и их коды:
0x50: PAGED_FAULT_IN_NON_PAGED_AREA 0x8E: KERNEL_MODE_EXCEPTION_NOT_HANDLED 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xCE: DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 0x1E: KMODE_EXCEPTION_NOT_HANDLED 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION 0xC9: DRIVER_VERIFIER_IOMANAGER_VIOLATION |
Пояснения к кодам распространенных ошибок и значению их параметров даны в DDK Documentation: Windows DDK->Driver Development Tools->Bug Check Codes.
Утилиты.
Для тестирования драйвера может быть полезна утилита Device Tree, поставляемая в составе DDK. Утилита позволяет просматривать параметры всех установленных в системе драйверов. Это может помочь убедиться в том, что драйвер действительно загружен и имеет необходимые параметры (например, зарегистрированные коды команд, тип драйвера и др.).
Специально для тестирования драйверов в состав DDK входит утилита Driver Verifier. Крайне рекомендуется производить проверку финальной версии драйвера этой утилитой, поскольку часть ошибок в драйвере (например, некорректная работа с нестраничной памятью) может быть незамечена даже при запуске драйвера. Driver Verifier имеет набор специальных тестов, позволяющих выявить подобные ошибки.
Источники информации.
DDK Documentation
MSDN
Стандартные заголовочные файлы, например:
ntddk.h
ntstatus.h
devioctl.h
указываются средства создания inf-файла, например, с использованием утилиты InfGen, входящей в состав DDK.
