[Previous] [Next]

Программные средства от Марка Руссиновича и SysInternals

Автор книги "Inside Windows 2000" Марк Руссинович является ветераном разработки программных средств для Windows, и некоторые из них будут весьма полезны разработчикам драйверов режима ядра. Ознакомиться с его программами и загрузить их shareware версии можно на интернет сайте sysinternals.com.

Программа RegMon

Программа RegMon (рисунок 2.13) перехватывает все обращения к Системному Реестру из приложений пользовательского режима и выдает сообщения о них в своем рабочем окне, что иногда бывает полезно, чтобы отследить, какие разделы этой общесистемной базы данных (Системного Реестра) использует конкретное приложение, и какие параметры его более всего интересуют.

Рис. 2.13
Программа RegMon

Важный психологический эффект от знакомства новичков с этой программой состоит в том, что она со всей наглядностью демонстрирует: программы, созданные разными производителями, используют Системный Реестр очень интенсивно, некоторые даже чрезмерно (вспомним Microsoft Internet Explorer).

Программа WinObj

Программа WinObj является удобным средством просмотра директорий имен объектов операционной системы Windows NT (включая 2000, XP и Server 2003). Для разработчика драйвера, естественно, наиболее интересными являются директории имен устройств и имен символьных ссылок (symbolic links), Device и Global?? соответственно, см. рисунок 2.14.

Рис. 2.14
Программа WinObj

В начале отладки драйвера непременно следует поинтересоваться в программе WinObj, созданы ли ожидаемые имена объектов устройств и соответствующие символьные ссылки, позволяющие обращаться к драйверу из клиентского кода (из приложения пользовательского режима или из другого драйвера режима ядра). Отсутствие ожидаемых имен сигнализирует о неполадках в драйвере. Зачастую, отсутствие этих имен в положенных местах сигнализирует о серьезных недочетах в процедурах инициализации драйвера, что не позволяет системе выполнить загрузку драйвера, а разработчику — увидеть хотя бы минимальные признаки жизни драйвера, хотя бы в виде диагностических сообщений для программ типа DebugView и DebugPrint Monitor, которые будут описаны ниже.

Для просмотра некоторых из директорий имен объектов могут понадобиться привилегии администратора.

Программа DebugView

Программа DebugView (рисунок 2.15) позволяет наблюдать в своем рабочем окне текст сообщений, которые во время своей работы выводит драйвер, если он использует специальные отладочные printf-подобные функции, такие как вызовы режима ядра DbgPrint в Windows NT или Win32 вызов OutputDebugString. Пример использования этих функций (а именно — DbgPrint) в программном коде драйвера режима ядра можно увидеть в следующей главе (на примере драйвера Example.sys).

Программа DebugView позволяет получать сообщения и с удаленных компьютеров по сетевым соединениям, включая Интернет, устанавливать фильтры (сообщения каких процессов следует выводить на экран), выводить сообщения в файл на жестком диске и просматривать crash dump файл. Некоторые сложности имеются лишь в получении сообщения от функций наблюдаемого драйвера, если они работают до момента запуска DebugView. В этом случае сообщения оказываются утерянными. Преодолеть эти затруднения можно при помощи программы DebugPrint Monitor, которая будет рассмотрена ниже.

Рис. 2.15
Программа DebugView

Для просмотра сообщений, которые выдают драйверы при работе инициализационных процедур (например, DriverEntry или AddDevice), но которые загружаются при запуске системы, можно использовать следующий прием. В случае, если драйвер был инсталлирован при помощи Мастера Установки и inf файла, в результате чего драйвер виден в Панели Настроек в окне Диспетчера Устройств следует выполнить отключение устройства, после чего из системы выгрузится драйвер (в частности, отработает процедура Unload). (Заметим, кстати, что между включением и отключением можно произвести замену файла драйвера на новую версию — если это необходимо). После этого необходимо выполнить там же, в Диспетчере Устройств, включение драйвера — в русскоязычной версии Windows это действие обозначено словом "задействовать". В результате будет динамически загружен ранее отключенный драйвер, а его работа начнется с вызова процедуры DriverEntry и т.д., что позволит увидеть все диагностические сообщения для программы DebugView (разумеется, если разработчик их предусмотрел).