Поделиться через


Основные сведения о проверке статических драйверов

Чтобы написать надежный драйвер, соответствующий модели драйвера Windows (WDM) или платформе драйвера режима ядра (KMDF), NDIS или Storport, необходимо иметь опыт и понять, как драйвер взаимодействует с диспетчером ввода-вывода. Тестирование этих драйверов в равной степени сложно.

Разработка твердых драйверов может быть сложной по следующим причинам:

  • Драйверы асинхронны даже на компьютерах с одним процессором.

  • Водители массово возвращаются.

  • Драйверы используют множество неясных правил.

  • Модели драйверов эволюционируют и устаревают со временем.

Тестирование драйверов устройств ограничено следующими причинами:

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

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

SDV улучшает как наблюдение за драйверами, так и управление ими во время тестирования. Определив правила для правильного использования функций WDM, KMDF, NDIS и Storport, а также отслеживая соответствие драйвера этим правилам, SDV улучшает возможность наблюдения за ошибками. Например, правило WDM LowerDriverReturn указывает, что при определенных обстоятельствах подпрограмма отправки драйвера всегда должна возвращать значение, возвращаемое более низким драйвером в стеке.

SDV также повышает контроль путем предоставления:

  • Враждебная модель среды драйвера, в которой может произойти несколько худших сценариев (например, вызовы операционной системы постоянно завершаются сбоем).

  • Мощный статический анализ (называемый проверкой модели), который систематически изучает все возможные пути выполнения в драйвере.

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

Это важно

SDV больше не поддерживается, а SDV недоступен в выпусках Windows 24H2 WDK или EWDK. Он недоступен в версиях WDK, выпущенных позже сборки 26017, и не включен в WDK Windows 24H2 RTM. SDV по-прежнему можно использовать, скачав Windows 11, версии 22H2 EWDK (выпущенный 24 октября 2023 г.) с инструментами сборки Visual Studio 17.1.5 с скачать пакет драйверов Windows (WDK). Рекомендуется использовать только enterprise WDK для запуска SDV. Использование более старых версий стандартной WDK в сочетании с последними выпусками Visual Studio не рекомендуется, так как это, скорее всего, приведет к сбоям анализа.
В будущем CodeQL будет основным средством статического анализа драйверов. CodeQL предоставляет мощный язык запросов, который обрабатывает код как базу данных для запроса, что упрощает запись запросов для конкретных поведения, шаблонов и многого другого. Дополнительные сведения об использовании CodeQL см. в CodeQL и тесте логотипа статических инструментов.