Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Чтобы 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 см. в разделе "Интерпретация результатов проверки статических драйверов".