Блог → Драйверы Windows XP. Часть 2. Windows DDK

Продолжая серию статей об архитектуре Windows XP, я хочу заметить, что не ошибся в заголовке, и пропустил XP намеренно, ведь именно так называется последняя версия DDK. Она содержит среду для создания драйверов систем Windows 2000 (в том числе с Service Pack 2), Windows Me и Windows XP, причем, как и раньше, можно создавать Checked- и Free-версии (соответственно, версия для отладки и рабочая) для каждого случая. Полная установка DDK (версия 2600) занимает 361 Мб.



Для использования DDK уже нет необходимости в установленном Visual C++, ведь пакет уже содержит необходимый компилятор. При этом попытка использования другого компилятора, вызывает ошибку. Однако для компилирования некоторых драйверов Windows Me всё же может понадобиться установленный Visual C++, так что для разработки драйверов Windows XP и 2000 уже нет необходимости приобретать дорогостоящие Professional или Enterprise версии компилятора.

Изменилась структура каталогов внутри DDK. В первую очередь, это обосновано наличием нескольких сред для компиляции драйверов. Нет необходимости указывать, откуда брать файлы ntddk.h и wdm.h: просто запустите нужную среду. Для создания бинарно-совместимых драйверов
рекомендуется запускать среду для самой младшей версии ОС, на которой должен работать такой драйвер. Если же этому драйверу желательно выполнять новые функции, присутствующие на более новых версиях операционной системы, используйте функции IoIsWdmVersionAvailable и MmGetSystem-RoutineAddress. Бинарно-совместимые драйверы требуют более осторожного подхода, так например, если драйвер создан в checked build для Windows XP и использует специфичные для Windows XP вызовы ntoskrnl, он "обрушится" на любой другой системе. Однако при использовании free build подобной проблемы не наблюдается, так что рекомендуется определять значение USE_LIBCNTPR=1 в исходниках драйверов для избежания описанной ситуации.

Новая DDK имеет большее количество утилит, из которых многие имеют 64-разрядные версии (директория \tools). Также диск DDK содержит утилиты для отладки 32-и 64-разрядных систем, однако же отладчики для 64-разрядных систем можно поставить только на 64-разрядную версию Windows. Устанавливаются они отдельно от DDK. В состав утилит входят отладчики kd и windbg. Отладчик ядра теперь может подключаться к локальной системе, на которой он работает (опция -kl для windbg и kd). Напомню, что ранее для отладки требовалось две машины. Единственный минус - на локально подключенной машине нельзя устанавливать breakpoint.

Также при загрузке драйвера на систему с включенным отладчиком ядра система запросит подключенную систему о наличии новой версии драйвера для тестирования, перепишет его и установит на отлаживаемой системе через порт отладки. Таким образом, можно не перезагружать систему при перезаписи новых версий тестируемых драйверов.

На этом я бы хочет закончить вторую часть статьи, так как в следующей, завершающей, я хочу коснуться совсем другой темы, и смешивать их было бы неправильно. Если вам понравилось, заходите в мой блог завтра, и читайте продолжения. До встречи!