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


Набор правил блокировки (WDM)

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

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

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

CancelSpinLock

Правило CancelSpinLock указывает, что драйвер вызывает IoAcquireCancelSpinLock перед вызовом IoReleaseCancelSpinLock и что драйвер вызывает IoReleaseCancelSpinLock перед любыми последующими вызовами IoAcquireCancelSpinLock.

CancelSpinlockRelease

Правило CancelSpinlockRelease указывает, что вызовы IoAcquireCancelSpinLock и IoReleaseCancelSpinLock используются в строгом чередовке. То есть каждый вызов IoAcquireCancelSpinLock должен иметь соответствующий вызов IoReleaseCancelSpinLock.

Критическиерегионы

Правило CriticalRegions указывает, что драйвер должен вызывать KeEnterCriticalRegion перед вызовом KeLeaveCriticalRegion и что драйвер вызывает KeLeaveCriticalRegion перед любыми последующими вызовами KeEnterCriticalRegion. (Вложенные вызовы разрешены.)

ExclusiveResourceAccess

Правило ExclusiveResourceAccess указывает, что драйвер вызывает ExAcquireResourceExclusiveLite перед вызовом ExReleaseResourceLite или ExReleaseResourceForThreadLite , и указывает, что драйвер вызывает ExReleaseResourceLite или ExReleaseResourceForThreadLite перед любыми последующими вызовами ExAcquireResourceExclusiveLite.

GuardedRegions

Правило GuardedRegions проверяет, используются ли вызовы KeEnterGuardedRegion и KeLeaveGuardedRegion в строгом чередовке.

QueuedSpinLock

Правило QueuedSpinLock указывает, что драйвер вызывает KeAcquireInStackQueuedSpinLock перед вызовом KeReleaseInStackQueuedSpinLock и что драйвер вызывает KeReleaseInStackQueuedSpinLock перед последующими вызовами KeAcquireInStackQueuedSpinLock.

QueuedSpinLockRelease

Правило QueuedSpinLockRelease указывает, что вызовы KeAcquireInStackQueuedSpinLock и KeReleaseInStackQueuedSpinLock используются в строгом чередовке.

Спин

Правило SpinLock указывает, что после вызова KeAcquireSpinLock драйвер вызывает KeReleaseSpinLock перед последующими вызовами KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc.

SpinLockDpc

Правило SpinLockDpc указывает, что вызовы KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc и KeReleaseSpinLock должны выполняться в строгом чередовке. То есть после вызова KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc драйвер должен вызвать KeReleaseSpinLock перед последующими вызовами KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc.

SpinlockRelease

Правило SpinlockRelease указывает, что вызовы KeReleaseSpinLock выполняются в строгом чередовке с KeAcquireSpinLock и KeAcquireSpinLockRaiseToDpc. То есть драйвер должен вызывать KeReleaseSpinLock после вызова KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc и перед последующими вызовами KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc.

SpinLockSafe

Правило SpinLockSafe указывает, что IoStartNextPacket и IoCompleteRequest не вызываются при удержании блокировки спина.

WithinCriticalRegion

Правило WithinCriticalRegion указывает, что вызовы драйвера к определенным функциям синхронизации появляются только после вызова KeEnterCriticalRegion и перед вызовом KeLeaveCriticalRegion.

Ниже перечислены затронутые функции синхронизации.

Выбор набора правил блокировки

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

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

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

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

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