Разные наборы правил (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 с параметром /check . Рассмотрим пример.

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

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