Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакет драйверов Windows (WDK) предоставляет средства проверки драйверов, которые помогают обнаруживать и исправлять ошибки во время разработки. Эти средства включают статические средства анализа, такие как CodeQL и динамические инструменты, такие как средство проверки драйверов, которые могут находить критические ошибки перед развертыванием. Использование этих средств проверки в начале разработки экономит время и предотвращает серьезные проблемы с драйвером в рабочей среде.
Документация по WDK описывает эти средства проверки и рекомендует их использовать, так как каждое средство обнаруживает различные типы ошибок драйвера разными способами. Эти средства гораздо эффективнее ручной проверки. Они могут обнаруживать ошибки, которые обычно не найдены в стандартных тестах драйверов, и они воплощают опыт разработчиков опытных разработчиков драйверов и конструкторов интерфейсов драйверов Windows.
Для получения наилучших результатов используйте все средства, которые могут выполняться на вашем драйвере. Если вы опустите любой из этих средств, вы можете пропустить серьезную ошибку в драйвере.
Статические и динамические средства проверки
Существует два основных типа средств проверки:
Статические средства проверки проверяют код драйвера без запуска драйвера. Поскольку эти инструменты не полагаются на тесты, которые исполняют код, они могут быть чрезвычайно полными. Теоретически статические средства проверки могут проверять весь код драйвера, включая пути кода, которые редко выполняются на практике. Тем не менее, поскольку драйвер на самом деле не работает, эти средства могут генерировать ложные положительные результаты. То есть они могут сообщать об ошибке в пути исполнения кода, который на практике не имеет места.
CodeQL — это основной статический инструмент анализа драйверов. CodeQL предоставляет мощный язык запросов, который обрабатывает код как базу данных для запроса, что упрощает запись запросов для конкретных поведений и шаблонов. Программа совместимости оборудования Windows требует использования CodeQL для тестов Static Tool Logo (STL) на наших клиентских и серверных операционных системах. Дополнительные сведения см. в разделе CodeQL и тест логотипа статических инструментов.
Динамические средства проверки проверяют код драйвера во время выполнения драйвера, как правило, перехватыв вызовы к часто используемым подпрограммам поддержки драйверов и заменяя вызовы собственным версиям проверки ошибок одних и того же подпрограмм. Так как драйвер на самом деле работает, пока динамические инструменты выполняют проверку, результаты ложноположительных результатов редки. Однако, так как динамические средства обнаруживают только те действия, которые происходят во время мониторинга драйвера, средства могут пропустить определенные дефекты драйверов, если покрытие теста драйвера не достаточно. В то же время с помощью информации, доступной во время выполнения, например, сведения, которые сложнее извлекать из исходного кода, динамические средства проверки могут обнаруживать определенные классы ошибок драйвера, которые труднее обнаруживать с помощью статических средств анализа.
Используйте сочетание статических и динамических средств проверки подлинности. Статические средства позволяют проверять пути кода, которые трудно выполнять на практике, в то время как динамические инструменты находят серьезные ошибки, возникающие в драйвере.
Обзор средств проверки
Внимание
Средство проверки статических драйверов (SDV) больше не поддерживается. Он недоступен в более новых версиях WDK, чем сборка 26017, включая Windows 24H2 RTM WDK. Использование SDV для анализа не рекомендуется.
WDK описывает следующие средства проверки и рекомендует их использовать разработчиками драйверов и тестировщиками. Они перечислены в том порядке, в котором они обычно используются.
После компиляции кода
- CodeQL — это мощный механизм анализа семантического кода. Сочетание обширного набора высокозначных запросов безопасности и надежной платформы делает его бесценным инструментом для защиты кода драйвера. Дополнительные сведения см. в разделе CodeQL и тест логотипа статических инструментов.
При запуске драйвера
Используйте следующие динамические средства проверки, как только драйвер создан и работает без очевидных ошибок.
Средство проверки драйверов — это средство динамической проверки, написанное специально для драйверов Windows. Он включает несколько тестов, которые можно запускать одновременно на нескольких драйверах. Средство проверки драйверов настолько эффективно при поиске серьезных ошибок в драйверах, которые опытные разработчики драйверов и тестировщики настраивают его для запуска при каждом запуске драйвера в среде разработки или тестирования. Средство проверки драйверов входит в Windows. При включении средства проверки драйверов для драйвера необходимо также выполнить несколько тестов на драйвере. Средство проверки драйверов может обнаруживать некоторые ошибки драйвера, которые трудно обнаружить с помощью статических средств проверки. Ниже приведены примеры таких типов ошибок:
Переполнение буфера пула ядра. Когда проверенный драйвер выделяет буферы памяти пула, средство проверки драйверов защищает их с помощью недоступной страницы памяти. Если драйвер пытается использовать память после конца буфера, средство проверки драйверов инициирует проверку ошибок.
Использование памяти после освобождения. Специальные блоки памяти пула используют собственную страницу памяти и не делятся страницами памяти с другими выделениями. Когда драйвер освобождает блок памяти пула, соответствующая страница памяти становится недоступной. Если драйвер пытается использовать такую память после освобождения, драйвер немедленно завершает работу.
Использование памяти с возможностью страниц при выполнении с повышенными привилегиями IRQL. Когда проверенный драйвер вызывает IRQL на DISPATCH_LEVEL или более поздней версии, средство проверки драйверов обрезает все страницы памяти из системного рабочего набора, имитируя систему под давлением памяти. Драйвер завершает работу, если он пытается использовать один из этих страничных виртуальных адресов.
Моделирование низких ресурсов. Чтобы имитировать работу системы в условиях ограниченных ресурсов, средство проверки драйверов может намеренно вызывать отказ различных API ядра операционной системы, которые вызываются драйверами.
Утечки памяти. Проверка драйверов отслеживает выделения памяти, которые выполняет драйвер, и гарантирует, что драйвер освобождает память перед выгрузкой.
Операции ввода-вывода, которые занимают слишком много времени для завершения или отмены. Средство проверки драйверов может протестировать, как логика драйвера реагирует на значения, возвращаемые вызовом IoCallDriver.
Проверка соответствия DDI. (Доступно начиная с Windows 8) Средство проверки драйверов применяет набор правил интерфейса драйвера устройства (DDI), которые проверяют правильное взаимодействие между драйвером и интерфейсом ядра операционной системы.
Санитизатор адресов ядра (KASAN) — это технология обнаружения ошибок, поддерживаемая в драйверах Windows, которая позволяет обнаруживать несколько классов незаконного доступа к памяти, таких как переполнение буфера и события после использования.
Средство проверки приложений — это средство динамической проверки для приложений и драйверов в пользовательском режиме, написанных на C или C++. Он не проверяет управляемый код.