Запуск анализа кода для драйверов
Анализ кода для драйверов содержит сведения о возможных дефектах в исходном коде. Вы можете выполнять анализ кода вручную, а также автоматически выполнять анализ кода с каждой сборкой.
В этом разделе:
- Запуск анализа кода
- Просмотр результатов анализа кода
- Скрытие отчета о дефектах
- Изменение ограничений использования стека для предупреждений C6262 для драйверов в режиме ядра
- Связанные статьи
Это важно
Анализ кода для драйверов доступен в Windows 24H2 WDK и EWDK, но обратите внимание, что в будущем он будет выведен из эксплуатации.
В будущем CodeQL будет основным средством статического анализа драйверов. CodeQL предоставляет мощный язык запросов, который обрабатывает код как базу данных для запроса, что упрощает запись запросов для конкретных поведения, шаблонов и многого другого.
Дополнительные сведения об использовании CodeQL см. в CodeQL и тесте логотипа статических инструментов.
Выполнение анализа кода
Выполнение анализа кода в исходном коде драйвера вручную
- В Visual Studio выберите файл проекта драйвера или решение и выберите конфигурацию проекта и платформу для анализа.
- В меню Анализ или сборки щелкните Выполнить анализ кода в решении.
Автоматическое выполнение анализа кода в исходном коде драйвера с каждой сборкой
- В Visual Studio щелкните правой кнопкой мыши проект драйвера или решение в обозревателе решений и щелкните Свойства.
- В диалоговом окне свойств проекта щелкните Анализ кода.
- На странице свойств анализа кода для C/C++ выберите конфигурацию проекта и платформу, которую необходимо проанализировать (например, Windows 8 и Win32).
- Выберите Включить анализ кода для C/C++ при сборке.
- В разделе "Набор правил" выберите рекомендуемые правила драйвера Майкрософт. Это правило по умолчанию для драйверов.
- В меню Сборка щелкните "Сборка решения".
Просмотр результатов анализа кода
Если возможные дефекты находятся в исходном коде, в окне результатов анализа кода отображается номер предупреждения анализа кода и номер строки в исходном файле, где происходит дефект.
Просмотр дефектов
В окне результатов анализа кода щелкните номер строки, и описание дефекта отображается в окне результатов анализа кода.
В окне кода отображается исходный код и указывается место возникновения дефекта.
Чтобы узнать больше о конкретном предупреждении, нажмите кнопку "Предупреждение" в окне результатов анализа кода.
Просмотр файла журнала анализа кода, связанного с сборкой
- Перейдите в каталог для конфигурации сборки и платформы (например,
\\Windows7Release\\x64
). - Если вы используете рекомендуемые правила, файл журнала называется
vc.\*codeanalysis.xml
. Если вы создаете драйвер для Windows Server 2012, этот файл используется для создания журнала проверки драйвера.
Подавление отчета о дефектах
В некоторых случаях может потребоваться отключить отчет определенного предупреждения; Например, если предупреждение является главным образом информационным, и вы знаете причину ошибки.
Подавление предупреждений
Чтобы удалить экземпляр сообщаемого дефекта, выберите номер строки и предупреждение в окне результатов анализа кода.
В развернутом описании предупреждения щелкните Действия>Скрыть сообщение>в исходном.
Директива #pragma warning со спецификатором подавления подавляет предупреждение только для строки кода, идущей непосредственно после оператора #pragma warning.
#pragma warning(suppress: 6014)
Изменение ограничений на использование стека для предупреждения о C6262 для драйверов режима ядра.
В коде пользовательского режима и режима ядра пространство стека ограничено, и ошибка фиксации страницы стека приводит к исключению переполнения стека. Высокая загрузка стека особенно важна в режиме ядра, так как общее пространство стека доступно только 12 КБ. Код в режиме ядра должен агрессивно ограничить использование стека.
Средство анализа кода выдает предупреждение C6262 если локально в функции используется более 1 КБ пространства стека. Если вы хотите исследовать функции, которые могут быть ресурсоемкими, можно настроить или снизить пороговое значение стека, используемое C6262. При снижении порогового значения стека средство анализа кода может найти больше проблем. Затем вы можете выбрать решение этих проблем использования стека. Например, можно снизить пороговое значение до 400 байт, чтобы узнать, используются ли другие функции.
Настройка ограничения размера стека для C6262
- Откройте файл проекта Visual Studio (.vcxproj) для драйвера в режиме ядра (или компонента) в Блокноте или другом текстовом редакторе.
- Добавьте новую <ItemDefinitionGroup> для компилятора <ClCompile>.
- Добавьте элемент <PREfastAdditionalOptions> и задайте размер стека в<байтов>. Значение по умолчанию — stacksize1024.
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
Сохраните файл проекта. Запустите Visual Studio, загрузите обновленный проект драйвера и выполните анализ кода.
Чтобы вернуться к значению по умолчанию 1 КБ, отмените изменения, внесенные в файл проекта, или измените значение размера стека на stacksize1024.