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


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

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

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

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

ParentObjectCheckLock

Правило ParentObjectCheckLock указывает, что драйвер должен вызывать WdfWaitLockCreate и WdfSpinLockCreate , устанавливая родительский объект.

ReqSendWhileSpinlock

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

Спин

Правило spinlock указывает, что вызовы KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc и KeReleaseSpinlock используются в строгом чередованности.

SpinlockDpc

Правило SpinlockDpc указывает, что вызовы KeAcquireSpinLock или KeAcquireSpinLockRaiseToDpc и KeReleaseSpinlock используются для строгого чередования.

SpinlockRelease

Правило SpinlockRelease указывает, что вызовы KeAcquireSpinLock, KeAcquireSpinLockRaiseToDpc и KeReleaseSpinLock используются сбалансированным образом в рамках обратного вызова KMDF. В конце любой процедуры обратного вызова KMDF драйвер не должен удерживать спин-блокировку.

WdfInterruptLock

Правило WdfInterruptLock указывает, что вызовы метода WdfInterruptAcquireLock используются в строгом чередовке с вызовами WdfInterruptReleaseLock. Кроме того, в конце любой процедуры обратного вызова KMDF драйвер не должен удерживать объект spin lock платформы, полученный при предыдущем вызове WdfInterruptAcquireLock.

WdfInterruptLockRelease

Правило WdfInterruptLockRelease указывает, что вызовы WdfInterruptAcquireLock и WdfInterruptReleaseLock используются сбалансированным образом в рамках процедуры обратного вызова KMDF. В конце любой процедуры обратного вызова KMDF драйвер не должен содержать объект spin lock платформы, полученный при предыдущем вызове WdfInterruptAcquireLock.

WdfSpinlock

Правило WdfSpinlock указывает, что вызовы метода WdfSpinLockAcquire используются в строгом чередовке с WdfSpinlockRelease. В конце любой процедуры обратного вызова KMDF драйвер не должен содержать объект spinlock платформы, полученный при предыдущем вызове WdfSpinLockAcquire.

WdfSpinlockRelease

Правило WdfSpinlockRelease указывает, что вызовы WdfSpinLockAcquire и WdfSpinlockRelease используются сбалансированным образом в функции обратного вызова событий KMDF. При возврате функции обратного вызова события KMDF драйвер не должен содержать объект spin lock платформы, полученный при предыдущем вызове WdfSpinLockAcquire.

WdfWaitlock

Правило WdfWaitlock указывает, что вызовы WdfWaitLockAcquire используются в строгом чередовке с WdfWaitlockRelease. При возврате функции обратного вызова события KMDF драйвер не должен содержать объект spin lock платформы, полученный при предыдущем вызове WdfWaitLockAcquire.

WdfWaitlockRelease

Правило WdfWaitlockRelease указывает, что вызовы WdfWaitLockAcquire и WdfWaitLockRelease используются сбалансированным образом в функции обратного вызова событий KMDF. При возврате функции обратного вызова события KMDF драйвер не должен содержать объект spin lock платформы, полученный при предыдущем вызове WdfWaitLockAcquire.

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

  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).