Набор правил блокировки (Storport)
Используйте эти правила, чтобы убедиться, что драйвер правильно управляет общими ресурсами.
В этом разделе
Раздел | Описание |
---|---|
Правило CancelSpinLock (Storport) проверяет, что за каждым вызовом IoAcquireCancelSpinLock незамедлительно следует вызов IoReleaseCancelSpinLock. |
|
Правило QueuedSpinLock проверяет, что блокировки спина в очереди в стеке, полученные с помощью KeAcquireInStackQueuedSpinLock , немедленно освобождаются с помощью KeReleaseInStackQueuedSpinLock. Кроме того, в конце процедуры отправки или отмены драйвер не должен удерживать блокировки. |
|
Это правило проверяет, не вызывает ли драйвер KeReleaseInStackQueuedSpinLock без предварительного получения блокировки через KeAcquireInStackQueuedSpinLock. |
|
Это правило проверяет, что за вызовом KeAcquireSpinLock следует вызов KeReleaseSpinlock. Если драйвер снова вызывает KeAcquireSpinLockRaiseToDpc или KeAcquireSpinLock перед освобождением блокировки, правило завершается ошибкой. Кроме того, перед выходом из процедуры отправки или отмены драйвер должен снять блокировку спина. |
|
Это правило проверяет, что за вызовом KeAcquireSpinLockRaiseToDpc следует вызов KeReleaseSpinlock. Если драйвер снова вызывает KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc перед освобождением блокировки, правило завершается ошибкой. Кроме того, перед выходом из процедуры отправки или отмены драйвер должен снять блокировку спина. |
|
Это правило проверяет, что драйвер не пытается освободить блокировку через KeReleaseSpinLock , не получив ее с помощью KeAquireSpinlock или KeAcquireSpinLockRaiseToDpc. Правило проходит, когда полученная спиновая блокировка освобождается. |
|
Это правило проверяет, не вызываются ли подпрограммы IoStartNextPacket и IoCompleteRequest при удержании спин-блокировки. Правило отслеживает количество блокировок спина, удерживаемых в любое время, и если это число не равно 0 при вызове любой из подпрограмм, драйвер не выполняет правило. |
|
Драйверы минипорта необходимы для получения блокировки спина MSI для сообщения, если и только в том случае, если элемент InterruptSynchronizationMode структуры PORT_CONFIGURATION_INFORMATION (Storport) имеет значение InterruptSynchronizePerMessage. Это правило проверяет, что вызовы StorPortAcquireMSISpinLock выполняются только в том случае, если режим синхронизации — InterruptSynchronizePerMessage. |
|
Это правило проверяет, что блокировки, полученные с помощью StorPortAcquireSpinLock , быстро освобождаются с помощью StorPortReleaseSpinLock. Драйвер мини-порта не выполняет правило, если он пытается получить уже полученную блокировку или пытается освободить блокировку, которую он не получил. Кроме того, в конце процедуры отправки или отмены водитель не должен удерживать блокировки спина. |
|
Правило StorPortSpinLock3 проверяет иерархию получения блокировки, описанную в документации по подпрограмме StorPortAcquireSpinLock . |
|
Это правило является аналогом выпускаStorPortSpinLock. Это похоже на правило SpinLockRelease . |
Выбор набора правил блокировки
Выберите проект драйвера (.vcxProj) в Microsoft Visual Studio. В меню Драйвер щелкните Запустить средство проверки статических драйверов....
Перейдите на вкладку Правила . В разделе Наборы правил выберите Блокировка.
Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите Locking.sdv с параметром /проверка. Пример:
msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Дополнительные сведения см. в разделах Использование статического средства проверки драйверов для поиска дефектов в драйверах и Команд статического средства проверки драйверов (MSBuild).