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

Чтобы 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, драйвер должен:

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

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

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

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

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

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

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

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

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

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