Основные сведения о проверке статических драйверов
Чтобы написать надежный драйвер, соответствующий модели драйвера Windows (WDM) или платформе драйвера режима ядра (KMDF), NDIS или Storport, необходимо иметь опыт и понять, как драйвер взаимодействует с диспетчером ввода-вывода. Тестирование этих драйверов в равной степени сложно.
Разработка твердых драйверов может быть сложной по следующим причинам:
Драйверы асинхронны даже на компьютерах с одним процессором.
Водители массово возвращаются.
Драйверы используют множество неясных правил.
Модели драйверов являются эволюционными и возрастом с течением времени.
Тестирование драйверов устройств ограничено следующими причинами:
Наблюдение. Вы не можете наблюдать ошибку в взаимодействии между драйвером и операционной системой. Драйверы могут нарушать неявные правила использования, что приводит к сбою или неправильному поведению, но при разработке и тестировании драйверов трудно обнаружить первопричину ошибки.
Контроль. Драйверы, которые работают правильно в обычных условиях, могут иметь тонкие ошибки, возникающие только в исключительных ситуациях, таких как когда драйвер под ним в стеке завершается сбоем IRP. Такие ситуации трудно выполнить, поэтому традиционное тестирование не обнаруживает пути ошибок через код драйвера.
SDV улучшает как наблюдение, так и управление, которые у вас есть при тестировании драйверов. Определив правила для правильного использования функций WDM, KMDF, NDIS и Storport, а также отслеживая соответствие драйвера этим правилам, SDV улучшает возможность наблюдения за ошибками. Например, правило WDM LowerDriverReturn указывает, что при определенных обстоятельствах подпрограмма отправки драйвера всегда должна возвращать значение, возвращаемое более низким драйвером в стеке.
SDV также повышает контроль путем предоставления:
Враждебная модель среды драйвера, в которой может произойти несколько худших сценариев (например, вызовы операционной системы постоянно завершаются сбоем).
Мощный статический анализ (называемый проверкой модели), который систематически изучает все возможные пути выполнения в драйвере.
SDV — это важное средство модульного тестирования для драйверов устройств. Он помещает водителя в враждебной среде и систематически проверяет пути кода через водителя, искать нарушения правил использования модели драйвера.
Внимание
SDV больше не поддерживается, а SDV недоступен в выпусках Windows 24H2 WDK или EWDK. Он недоступен в WDKs более поздней сборки 26017 и не включен в windows 24H2 RTM WDK.
SDV по-прежнему можно использовать, скачав Windows 11 версии 22H2 EWDK (выпущено 24 октября 2023 г.) с инструментами сборки Visual Studio 17.1.5 из скачивания комплекта драйверов Windows (WDK). Рекомендуется использовать только enterprise WDK для запуска SDV. Использование более старых версий стандартной WDK в сочетании с последними выпусками Visual Studio не рекомендуется, так как это, скорее всего, приведет к сбоям анализа.
В будущем CodeQL будет основным средством статического анализа драйверов. CodeQL предоставляет мощный язык запросов, который обрабатывает код как базу данных для запроса, что упрощает запись запросов для конкретных поведения, шаблонов и многого другого.
Дополнительные сведения об использовании CodeQL см. в разделе CodeQL и проверка логотипа статических инструментов.