Поддерживаемые драйверы
Чтобы SDV проверял драйвер, он должен иметь возможность интерпретировать код драйвера, в частности, точки входа драйвера и код в функциях и подпрограммах, поддерживающих необходимые функции драйвера.
В следующих разделах описываются основные требования к драйверам и конкретный синтаксис, который SDV ожидает от проверяемых драйверов. SDV не проверяет, соответствуют ли драйверы этим требованиям, но если драйвер не соответствует требованиям, SDV может не работать и в редких ситуациях он сообщает ложноположительные или ложноотрицающие результаты из-за неправильной интерпретации.
Основные характеристики драйвера
SDV может проверять только драйверы со следующими характеристиками:
SDV проверяет драйверы и библиотеки, написанные на C и C++.
SDV выполняет полную проверку только для драйверов устройств, совместимых с KMDF и WDM (драйверы функций, драйверы фильтров и автобусов), драйверы NDIS (фильтры, мини-порты и драйверы протоколов) и драйверы Storport.
SDV пытается выполнить ограниченную проверку универсальных свойств (например , NullCheck) для драйверов, которые не соответствуют указанным выше категориям.
SDV может проверять драйверы WDM, объявляющие функции обратного вызова драйвера, с помощью типов ролей функций WDM. Сведения о том, как объявлять функции, см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM.
SDV может проверять драйверы, созданные на платформе драйвера в режиме ядра, при условии, что вы объявляете каждую функцию обратного вызова с помощью типа роли функции обратного вызова 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 см. в разделе Интерпретация результатов средства проверки статических драйверов.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по