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


Набор прочих правил (NDIS)

Используйте эти правила, чтобы убедиться, что драйвер правильно соответствует общему набору требований к правильной обработке таймеров, операций приостановки, ключей, строк и привязок.

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

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

CancelTimerObject

Правило CancelTimerObject указывает, что NdisSetTimerObject и NdisCancelTimerObject вызываются в альтернативном порядке. Конечная цель — убедиться, что все таймеры будут отменены по окончании MiniportHaltEx .

MiniportPause_Return

Правило MiniportPause_Return указывает, что функция обратного вызова MiniportPause должна возвращать только NDIS_STATUS_SUCCESS, если операция приостановки завершена, или NDIS_STATUS_PENDING, если драйвер минипорта находится в состоянии приостановки. Любое другое возвращаемое состояние является недопустимым.

NdisOpenConfigurationEx

Это правило проверяет, вызываются ли NdisOpenConfigurationEx и NdisCloseConfiguration в альтернативном порядке. Конечная цель — убедиться, что дескрипторы конфигурации закрываются при выходе MiniportHaltEx

NdisQueryBindInstanceName

NdisQueryBindInstanceName выделяет память для строки, указывающей понятное имя. После того как вызывающий объект завершит использование этой памяти, вызывающий объект должен вызвать функцию NdisFreeMemory , чтобы освободить память.

NdisReEnumerateProtocolBindings

Драйверы протокола не могут вызывать NdisReEnumerateProtocolBindings из контекста функций ProtocolBindAdapterEx или ProtocolUnbindAdapterEx . Кроме того, драйверы протокола не могут вызывать NdisReEnumerateProtocolBindings из контекста функции ProtocolNetPnPEvent , если параметр ProtocolBindingContextобъекта ProtocolNetPnPEvent не имеет значения NULL. Однако драйверы протоколов могут вызывать NdisReEnumerateProtocolBindings из контекста ProtocolNetPnPEvent, если ProtocolBindingContext имеет значение NULL. Значение NULL ProtocolBindingContext указывает, что событие применяется ко всем привязкам.

PeriodicTimer

Правило PeriodicTimer указывает, что вызывающий объект NdisCancelTimerObject должен выполняться в среде IRQL = PASSIVE_LEVEL если в параметре MillisecondsPeriod функции NdisSetTimerObject было указано ненулевое значение. Если параметр MillisecondsPeriod функции NdisSetTimerObject был равен нулю, вызывающие объекты NdisCancelTimerObject могут выполняться в IRQL <= DISPATCH_LEVEL.

WriteErrorLog

Правило WriteErrorLog указывает, что если функция NdisMAllocateSharedMemory вызывается в функции MiniportInitializeEx , драйвер также должен вызвать NdisWriteErrorLogEntry в случае сбоя выделения.

Выбор набора правил "Прочее"

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

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

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

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

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