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


Поддерживаемые драйверы

Чтобы sdV проверял драйвер, он должен интерпретировать код драйвера, в частности точки входа драйвера и код в функциях и подпрограммах, поддерживающих необходимые функции драйвера.

В следующих разделах описываются основные требования для драйверов и конкретный синтаксис, который SDV ожидает от проверенных драйверов. 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 и проверка логотипа статических инструментов.

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

SDV может проверить только драйверы со следующими характеристиками:

  • SDV проверяет драйверы и библиотеки, написанные на C и C++.

  • SDV выполняет полную проверку только для драйверов устройств, совместимых с KMDF и WDM (драйверы функций, драйверы фильтров и шины), драйверы NDIS (фильтры, минипорт и драйверы протокола), а также драйверы Storport.

  • SDV пытается выполнить ограниченную проверку универсальных свойств (например , NullCheck) на драйверах, которые не соответствуют приведенным выше категориям.

  • SDV может проверить драйверы WDM, объявляющие их функции обратного вызова драйвера с помощью типов ролей функций WDM. Сведения о том, как объявлять функции, см. в разделе "Объявление функций" с помощью типов ролей функций для драйверов WDM.

  • SDV может проверить драйверы, созданные из платформы Driver Framework в режиме ядра, если вы объявляете каждую функцию обратного вызова с помощью типа функции обратного вызова SDV-KMDF. Дополнительные сведения см. в разделе "Объявление функций с помощью типов ролей функций для драйверов KMDF".

  • SDV может проверить драйверы NDIS, если вы заметите каждую функцию обратного вызова с объявлением функции с помощью типа функции обратного вызова SDV-NDIS. Дополнительные сведения см. в разделе "Объявление функций с помощью типов ролей функций для драйверов NDIS".

  • SDV может проверить драйверы Storport, если вы заметите каждую функцию обратного вызова с объявлением функции. Для этого используется тип функции обратного вызова SDV-Storport. Дополнительные сведения см. в разделе "Объявление функций с помощью типов ролей функций для драйверов Storport".

Основные требования к драйверу

Чтобы проверить драйвер WDM, драйвер должен:

Чтобы проверить драйвер KMDF, драйвер должен:

Чтобы проверить драйвер NDIS, драйвер должен:

Кроме того, SDV может проверить драйверы, поддерживающие:

Зарезервированные имена функций

Подсистема проверки SDV не работает должным образом, если код драйвера или библиотеки использует те же шаблоны функций, что и SDV, которые используются внутренне.

В частности, SDV неправильно интерпретирует код, если:

  • Код содержит имена функций, которые начинаются с __init и за которыми следует одно или несколько целых чисел, например __init123.

  • Код содержит имена функций, которые начинаются с sdv_, например sdv_Func, или включают строку _sdv_, например Func_sdv_ или Func_sdv_foo.

  • Библиотека использует .def файл для переименования экспортируемой функции, а внешнее имя совпадает с именем другой статической функции в библиотеке.

Если код драйвера или код библиотеки включает эти элементы, SDV пытается проверить драйвер или обработать библиотеку, но результат не поддерживается функцией (NSF). Дополнительные сведения о результатах SDV см. в разделе "Интерпретация результатов проверки статических драйверов".