Запуск анализа кода для драйверов

Анализ кода для драйверов содержит сведения о возможных дефектах в исходном коде. Вы можете выполнять анализ кода вручную, а также автоматически выполнять анализ кода с каждой сборкой.

В этом разделе:

Внимание

Анализ кода для драйверов доступен в Windows 24H2 WDK и EWDK, но следует рекомендовать, что он будет снят в будущем.
В будущем CodeQL будет основным средством статического анализа драйверов. CodeQL предоставляет мощный язык запросов, который обрабатывает код как базу данных для запроса, что упрощает запись запросов для конкретных поведения, шаблонов и многого другого. Дополнительные сведения об использовании CodeQL см. в разделе CodeQL и проверка логотипа статических инструментов.

Запуск анализа кода

Выполнение анализа кода в исходном коде драйвера вручную

  1. В Visual Studio выберите файл проекта драйвера или решение и выберите конфигурацию проекта и платформу для анализа.
  2. В меню "Анализ или сборка" щелкните "Выполнить анализ кода" в решении.

Автоматическое выполнение анализа кода в исходном коде драйвера с каждой сборкой

  1. В Visual Studio щелкните правой кнопкой мыши проект драйвера или решение в Обозреватель решений и выберите пункт "Свойства".
  2. В диалоговом окне свойств проекта щелкните " Анализ кода".
  3. На странице "Анализ кода для C/C++ Properties" выберите конфигурацию проекта и платформу, которую необходимо проанализировать (например, Windows 8 и Win32).
  4. Выберите включить анализ кода для C/C++ в сборке.
  5. В разделе "Набор правил" выберите рекомендуемые правила драйвера Майкрософт. Это правило по умолчанию для драйверов.
  6. В меню "Сборка" щелкните "Создать решение".

Просмотр результатов анализа кода

Если в исходном коде обнаружены возможные дефекты, окно результатов анализа кода отображает номер предупреждения анализа кода и номер строки в исходном файле, где происходит дефект.

Просмотр дефектов

  1. В окне "Результаты анализа кода" щелкните номер строки и описание дефекта отображается в окне "Результаты анализа кода".

    В окне кода отображается исходный код и указывается место возникновения дефекта.

  2. Чтобы узнать больше о конкретном предупреждении, щелкните "Предупреждение" в окне "Результаты анализа кода".

Просмотр файла журнала анализа кода, связанного с сборкой

  1. Перейдите в каталог для конфигурации сборки и платформы (например, \\Windows7Release\\x64).
  2. Если вы используете рекомендуемые правила, вызывается vc.\*codeanalysis.xmlфайл журнала. Если вы создаете драйвер для Windows Server 2012, этот файл используется для создания журнала проверки драйвера.

Подавление отчета о дефектах

В некоторых случаях может потребоваться отключить отчет определенного предупреждения; Например, если предупреждение является главным образом информационным, и вы знаете причину ошибки.

Подавление предупреждений

  1. Чтобы удалить экземпляр сообщаемого дефекта, выберите номер строки и предупреждение в окне результатов анализа кода.

  2. В развернутом описании предупреждения нажмите кнопку "Действия>подавлять сообщение>в источнике".

    Директива pragma warning с описателями подавления подавляет предупреждение только для строки кода, которая немедленно следует оператору предупреждения #pragma.

    #pragma warning(suppress: 6014)
    

Изменение ограничений использования стека для предупреждений C6262 для драйверов в режиме ядра

В коде пользовательского режима и режима ядра пространство стека ограничено, и ошибка фиксации страницы стека приводит к исключению переполнения стека. Высокая загрузка стека особенно важна в режиме ядра, так как общее пространство стека доступно только 12 КБ. Код в режиме ядра должен агрессивно ограничить использование стека.

Средство анализа кода выдает предупреждение C6262 , если в функции используется более 1 КБ пространства стека. Если вы хотите исследовать функции, которые могут быть ресурсоемкими, можно настроить или снизить пороговое значение стека, используемое C6262. При снижении порогового значения стека средство анализа кода может найти больше проблем. Затем можно решить эти проблемы использования стека. Например, можно снизить пороговое значение до 400 байт, чтобы узнать, используются ли другие функции.

Настройка ограничения стека для C6262

  1. Откройте файл проекта Visual Studio (.vcxproj) для драйвера в режиме ядра (или компонента) в Блокноте или другом текстовом редакторе.
  2. Добавьте новую группу ItemDefinitionGroup> для компилятора< ClCompile>.<
  3. Добавьте элемент PREfastAdditionalOptions> и задайте байты<> стека.< Значение по умолчанию — stacksize1024.
     <ItemDefinitionGroup>
       <ClCompile>


      <!-- Change stack depth for C6262 from 1024 to 400 -->
      <PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>

    </ClCompile>
  </ItemDefinitionGroup>
  1. Сохраните файл проекта. Запустите Visual Studio, загрузите обновленный проект драйвера и выполните анализ кода.

    Чтобы вернуться к значению по умолчанию 1 КБ, отмените изменения, внесенные в файл проекта, или измените значение размера стека для стека1024.

Анализ кода для предупреждений драйверов