Набор правил блокировки (WDM)
Используйте эти правила, чтобы убедиться, что драйвер правильно управляет общими ресурсами.
В этом разделе
Раздел | Описание |
---|---|
Правило CancelSpinLock указывает, что драйвер вызывает IoAcquireCancelSpinLock перед вызовом IoReleaseCancelSpinLock и что драйвер вызывает IoReleaseCancelSpinLock перед любыми последующими вызовами IoAcquireCancelSpinLock. |
|
Правило CancelSpinlockRelease указывает, что вызовы IoAcquireCancelSpinLock и IoReleaseCancelSpinLock используются в строгом чередовке. То есть каждый вызов IoAcquireCancelSpinLock должен иметь соответствующий вызов IoReleaseCancelSpinLock. |
|
Правило CriticalRegions указывает, что драйвер должен вызывать KeEnterCriticalRegion перед вызовом KeLeaveCriticalRegion и что драйвер вызывает KeLeaveCriticalRegion перед любыми последующими вызовами KeEnterCriticalRegion. (Вложенные вызовы разрешены.) |
|
Правило ExclusiveResourceAccess указывает, что драйвер вызывает ExAcquireResourceExclusiveLite перед вызовом ExReleaseResourceLite или ExReleaseResourceForThreadLite , и указывает, что драйвер вызывает ExReleaseResourceLite или ExReleaseResourceForThreadLite перед любыми последующими вызовами ExAcquireResourceExclusiveLite. |
|
Правило GuardedRegions проверяет, используются ли вызовы KeEnterGuardedRegion и KeLeaveGuardedRegion в строгом чередовке. |
|
Правило QueuedSpinLock указывает, что драйвер вызывает KeAcquireInStackQueuedSpinLock перед вызовом KeReleaseInStackQueuedSpinLock и что драйвер вызывает KeReleaseInStackQueuedSpinLock перед последующими вызовами KeAcquireInStackQueuedSpinLock. |
|
Правило QueuedSpinLockRelease указывает, что вызовы KeAcquireInStackQueuedSpinLock и KeReleaseInStackQueuedSpinLock используются в строгом чередовке. |
|
Правило SpinLock указывает, что после вызова KeAcquireSpinLock драйвер вызывает KeReleaseSpinLock перед последующими вызовами KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc. |
|
Правило SpinLockDpc указывает, что вызовы KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc и KeReleaseSpinLock должны выполняться в строгом чередовке. То есть после вызова KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc драйвер должен вызвать KeReleaseSpinLock перед последующими вызовами KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc. |
|
Правило SpinlockRelease указывает, что вызовы KeReleaseSpinLock выполняются в строгом чередовке с KeAcquireSpinLock и KeAcquireSpinLockRaiseToDpc. То есть драйвер должен вызывать KeReleaseSpinLock после вызова KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc и перед последующими вызовами KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc. |
|
Правило SpinLockSafe указывает, что IoStartNextPacket и IoCompleteRequest не вызываются при удержании блокировки спина. |
|
Правило WithinCriticalRegion указывает, что вызовы драйвера к определенным функциям синхронизации появляются только после вызова KeEnterCriticalRegion и перед вызовом KeLeaveCriticalRegion. Ниже перечислены затронутые функции синхронизации. |
Выбор набора правил блокировки
Выберите проект драйвера (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).