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


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

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

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

Раздел Описание

Init_DeRegisterInterrupt

Правило Init_DeRegisterInterrupt указывает, что если NdisMRegisterInterruptEx вызывается хотя бы один раз во время MPInitilize, то NdisMDeregisterInterruptEx должен вызываться по крайней мере один раз в MPHaltEx.

Init_NdisAllocateIoWorkItem

Правило Init_NdisAllocateIoWorkItem указывает, что если NdisAllocateIoWorkItem вызывается хотя бы один раз во время MiniportInitializeEx, функция NdisFreeIoWorkItem должна:

  • — вызываться по крайней мере один раз в MPHaltEx, если MiniportInitializeEx выполняется успешно.
  • — вызывается в MiniportInitializeEx, если MiniportInitializeEx завершается сбоем.

Init_RegisterInterrupt

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

Если NdisMRegisterInterruptEx вызывается по крайней мере один раз во время MiniportInitializeEx, функция NdisMDeregisterInterruptEx должна вызываться по крайней мере один раз в MiniportHaltEx.

Init_RegisterSG

Правило Init_RegisterSG указывает, что регистрация списка точечной сборки (SG), которая обычно происходит во время инициализации, должна быть отменена, если что-то пойдет не так в процессе инициализации или во время остановки драйвера минипорта.

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

NdisFDeregisterFilterDriver

Драйвер фильтра должен вызывать NdisFDeregisterFilterDriver из процедуры FilterDriverUnload .

NdisMDeregisterInterruptEx

После того как NdisMDeregisterInterruptEx возвращает управление, драйвер мини-порта не может вызвать функцию NdisMSynchronizeWithInterruptEx .

NullCheck

Правило NullCheck проверяет, что значение NULL в коде драйвера не разыменовывается позже в драйвере. Это правило сообщает о дефекте, если выполняется одно из следующих условий:

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

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

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

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

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

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

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

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