Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы 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 проверяет драйверы и библиотеки, написанные на C и C++.
SDV выполняет полную проверку только для драйверов устройств, совместимых с KMDF и WDM (драйверы функций, драйверы фильтров и шины), драйверы NDIS (фильтры, минипорт и драйверы протокола), а также драйверы Storport.
SDV пытается выполнить ограниченную проверку универсальных свойств (например , NullCheck) на драйверах, которые не соответствуют приведенным выше категориям.
SDV может проверить драйверы WDM, объявляющие функции обратного вызова драйвера, с помощью типов ролей функций WDM. Сведения о том, как объявлять функции, см. в разделе "Объявление функций" с помощью типов ролей функций для драйверов WDM.
SDV может проверить драйверы, созданные из Kernel-Mode Driver Framework, если вы объявляете каждую функцию обратного вызова с помощью типа роли функции обратного вызова SDV-KMDF. Дополнительные сведения см. в разделе "Объявление функций с помощью типов ролей функций для драйверов KMDF".
SDV может проверить драйверы NDIS, если вы аннотируете каждую функцию обратного вызова ее объявлением, используя тип функции обратного вызова SDV-NDIS. Дополнительные сведения см. в разделе "Объявление функций с помощью типов ролей функций для драйверов NDIS".
SDV может проверять драйверы Storport, если вы аннотируете каждую функцию обратного вызова объявлением функции. Для этого используется тип функции обратного вызова SDV-Storport. Дополнительные сведения см. в разделе "Объявление функций с помощью типов ролей функций для драйверов Storport".
Основные требования к драйверу
Чтобы SDV смогла проверить драйвер WDM, необходимо:
Включить Wdm.h или Ntddk.h (Wdm.h — это подмножество ntddk.h).
Создайте объекты устройства с помощью методов, описанных в разделе "Введение в объекты устройства " и приведенные ниже.
Создайте подпрограмму выгрузки, написанную как рекомендовано в создании подпрограммы выгрузки.
Объявите каждую функцию диспетчера с помощью объявления типа роли функции, описанного в разделе "Использование объявлений типов ролей функции". Сведения о типах ролей WDM и аннотациях _Dispatch_type_ (тип) см. в разделе «Объявление функций с использованием типов ролей функций для драйверов WDM».
Чтобы SDV мог проверить драйвер KMDF, драйвер должен:
Включите Wdf.h и Ntddk.h.
Создайте объекты KMDF, описанные в разделе "Использование платформы для разработки драйвера".
Аннотируйте каждую функцию обратного вызова с помощью типа роли функции обратного вызова SDV-KMDF, описанных в разделе «Использование объявлений типов ролей функции». Список поддерживаемых типов ролей см. в объявлениях функций KMDF средства проверки статических драйверов.
Чтобы SDV проверила драйвер NDIS, необходимо, чтобы драйвер:
Включите Ndis.h и Ntddk.h.
Следуйте инструкциям в руководстве по проектированию сети) для создания драйверов NDIS.
Аннотируйте каждую функцию обратного вызова с помощью типа роли функции обратного вызова SDV-NDIS, как описано в разделе "Использование объявлений типов ролей функции". Список поддерживаемых типов ролей см. в объявлениях функций NDIS для проверки статических драйверов.
Кроме того, SDV может проверить драйверы, поддерживающие:
Зарезервированные имена функций
Подсистема проверки SDV не работает должным образом, если код драйвера или библиотеки использует те же шаблоны имен функций, которые SDV применяет во внутреннем использовании.
В частности, SDV неправильно интерпретирует код, если:
Код содержит имена функций, которые начинаются с __init и за которыми следует одно или несколько целых чисел, например __init123.
Код содержит имена функций, которые начинаются с sdv_, например sdv_Func, или включают строку _sdv_, например Func_sdv_ или Func_sdv_foo.
Библиотека использует
.defфайл для переименования экспортируемой функции, а внешнее имя совпадает с именем другой статической функции в библиотеке.
Если код драйвера или код библиотеки включает эти элементы, SDV пытается проверить драйвер или обработать библиотеку, но результат не поддерживается функцией (NSF). Дополнительные сведения о результатах SDV см. в разделе "Интерпретация результатов проверки статических драйверов".