Поделиться через


Набор правил использования DDI (WDM)

Используйте эти правила, чтобы убедиться, что ваш драйвер правильно использует WDM DDIs.

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

Тема Описание

DebugBreakUsage

Правило DebugBreakUsage указывает, что драйвер не должен вызывать DbgBreakPoint или DbgBreakPointWithStatus. Это правило применяется только при создании не отладочной версии драйвера.

DoubleFetch

Правило DoubleFetch проверяет наличие двойного извлечения из указателей памяти в пользовательском режиме. Двойной доступ к режиму ядра памяти пользовательского режима может привести к проблеме безопасности состояния гонки. При доступе к данным режима пользователя код режима ядра должен создать копию данных пользовательского режима локально и избежать доступа к данным режима пользователя несколько раз. Не удается сделать это, это приводит к возникновению проблемы, известной как "двойное получение", где данные могут изменяться после первого доступа.

NullCheck

Правило NULLCheck проверяет, что значение NULL внутри кода драйвера не разыменовывается в дальнейшем в драйвере. Это правило сообщает о дефекте, если одно из этих условий истинно.

  • Происходит присваивание значения NULL, которое разыменовывается позже.
  • В драйвере есть глобальный или передаваемый параметр процедуры, который может принимать значение NULL и используется позже; там есть явная проверка, которая предполагает, что начальное значение указателя может быть NULL.

При нарушениях правил NullCheck наиболее релевантные операторы кода выделены в области дерева трассировки. Дополнительные сведения о работе с выходными данными отчета см. в отчете средства проверки статических драйверов и понимании средства просмотра трассировки.

SafeStrings

Правило SafeStrings указывает, что драйвер вызывает только те функции обработки строк, которые защищают систему от непреднамеренного или вредоносного вторжения. Эти безопасные строковые функции для драйверов определены в ntstrsafe.h.

Устаревшие DDIs

Правило УстаревшиеDDIs указывает, что драйверы не должны вызывать FsRtlPrivateLock. Эта функция устарела. Вместо этого используйте FsRtlFastLock.

Выбор набора правил использования DDI

  1. Выберите проект драйвера (.vcxProj) в Microsoft Visual Studio. В меню драйвера щелкните Запустить средство проверки статических драйверов....

  2. Перейдите на вкладку "Правила ". В разделе "Наборы правил" выберите DDIUsage.

    Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите DDIUsage.sdv с параметром /check . Рассмотрим пример.

    msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Дополнительные сведения см. в статье Использование средства проверки статических драйверов для поиска дефектов в драйверах и команды средства проверки статических драйверов (MSBuild).