Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте эти правила, чтобы убедиться, что драйвер правильно соответствует общему набору требований для правильной обработки таймеров, приостановки операций, ключей, строк и привязок.
В этом разделе
| Тема | Описание |
|---|---|
Правило CancelTimerObject указывает, что NdisSetTimerObject и NdisCancelTimerObject вызываются в альтернативном порядке. Конечная цель заключается в том, чтобы убедиться, что все таймеры отменены, когда MiniportHaltEx заканчивается. |
|
Правило MiniportPause_Return указывает, что функция обратного вызова MiniportPause должна возвращать только NDIS_STATUS_SUCCESS, если операция приостановки завершена, или NDIS_STATUS_PENDING, если драйвер мини-порта находится в состоянии приостановки. Любой другой возвращаемый статус недопустим. |
|
Это правило проверяет, вызывается ли NdisOpenConfigurationEx и NdisCloseConfiguration в альтернативном порядке. Конечная цель — убедиться, что дескрипторы конфигурационных настроек закрыты при выходе MiniportHaltEx |
|
NdisQueryBindInstanceName выделяет память для строки, указывающей понятное имя. После окончания использования этой памяти вызывающий объект должен вызвать функцию NdisFreeMemory, чтобы освободить память. |
|
Драйверы протокола не могут вызывать NdisReEnumerateProtocolBindings из контекста функций ProtocolBindAdapterEx или ProtocolUnbindAdapterEx . Кроме того, драйверы протокола не могут вызывать NdisReEnumerateProtocolBindings из контекста функции ProtocolNetPnPEvent , если параметр ProtocolBindingContext протоколаProtocolNetPnPEvent не имеет значения NULL. Однако драйверы протокола могут вызывать NdisReEnumerateProtocolBindings из контекста ProtocolNetPnPEvent , если ProtocolBindingContext имеет значение NULL. Значение NULL ProtocolBindingContext указывает, что событие применяется ко всем привязкам. |
|
Правило PeriodicTimer указывает, что вызывающая функция NdisCancelTimerObject должна выполняться в IRQL = PASSIVE_LEVEL, если ненулевое значение было указано в параметре MillisecondsPeriod функции NdisSetTimerObject. Если параметр MillisecondsPeriod функции NdisSetTimerObject равен нулю, вызовы NdisCancelTimerObject могут выполняться в IRQL <= DISPATCH_LEVEL. |
|
Правило WriteErrorLog указывает, что если функция NdisMAllocateSharedMemory вызывается в функции MiniportInitializeEx, драйвер также должен вызвать NdisWriteErrorLogEntry, если выделение памяти не удалось. |
Чтобы выбрать набор правил "Прочие"
Выберите проект драйвера (.vcxProj) в Microsoft Visual Studio. В меню драйвера щелкните Запустить средство проверки статических драйверов....
Перейдите на вкладку "Правила ". В разделе "Наборы правил" выберите "Прочие".
Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите miscellaneous.sdv с параметром /check . Рассмотрим пример.
msbuild /t:sdv /p:Inputs="/check:Miscellaneous.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Дополнительные сведения см. в статье Использование средства проверки статических драйверов для поиска дефектов в драйверах и команды средства проверки статических драйверов (MSBuild).