Использование автогенерации кода для тестирования драйверов ОС Windows Дипломная работа студента 545 группы Комольцева Дмитрия Владимировича Научный руководитель: Сабашный В.Е. Рецензент: Лабутин И.А год Санкт-Петербургский Государственный Университет Математико-Механический Факультет Кафедра Системного Программирования
Автоматическое тестирование Быстрее, чем ручное Некоторые области неудобно тестировать вручную Удобно проводить регрессионное тестирование Перехват функций Тестирование путей обработки ошибок Эмуляция ситуации нехватки системных ресурсов Формирование «специфических» запросов системе
Существующая система Операционная система Тестируемый драйвер Wrapper ExAllocatePool(…) Kernel mode User mode Тестовое окружение Установка параметров перехвата. w_ExAllocatePool(…){ изменение параметров; задержка; ExAllocatepool(…); Возврат кода ошибки; } … ExAllocatePool(…); …
WDF как среда разработки драйверов OS Windows Самая новая технология разработки драйверов от Microsoft Поддерживаются версии Windows начиная с Windows 2000 Kernel Mode Driver Framework и User Mode Driver Framework Простота разработки драйверов Берет на себя работу с PnP, WMI, DMA,... Поддержка версий
Проблема WDF поддерживает одновременную работу с разными версиями окружения Требуемая версия определяется в процессе загрузки драйвера Старый метод перехвата не работает Требуется добавить поддержку перехвата WDF функций Нельзя нарушать работу старой системы перехвата
Решение Wrapper Kernel mode w_WdfDriverCreate (…){ Изменение параметров; ws_ WdfDriverCreate (…); Возврат кода ошибки; } Тестируемый драйвер Работа… WdfDriverCreate(DG,…); Снова работа; … Операционная система WdfDriverCreate(DG,…) ts_WdfDriverCreate(DG,…){ return w_WdfDriverCreate(…); } ws_WdfDriverCreate(…){ return WdfDriverCreate(DG, …); }
Схема генерации Заголовочные файлы Windows DDK Заголовки функций Шаблоны функций- перехватчиков Выбранные заголовки Сгенерированные функции-перехватчики для всех функций Исходные коды драйвера- перехватчика Готовый драйвер Сгенерированные функции-обертки для WDF функций Выбранные заголовки с помеченными WDF функциями
Результаты В тестовое окружение добавлена поддержка перехвата WDF функций Вспомогательный код генерируется автоматически Сохранена совместимость со старыми тестами Найдены критические ошибки в коммерческом продукте