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


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

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

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

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

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

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

Чтобы SDV смогла проверить драйвер WDM, необходимо:

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

Чтобы SDV проверила драйвер NDIS, необходимо, чтобы драйвер:

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

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

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

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

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

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

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

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