Partilhar via


Conjunto de regras de bloqueio (WDM)

Use essas regras para verificar se o driver gerencia corretamente os recursos compartilhados.

Nesta seção

Tópico Descrição

CancelSpinLock

A regra CancelSpinLock especifica que o driver chama IoAcquireCancelSpinLock antes de chamar IoReleaseCancelSpinLock e que o driver chama IoReleaseCancelSpinLock antes de qualquer chamada subsequente para IoAcquireCancelSpinLock.

CancelSpinlockRelease

A regra CancelSpinlockRelease especifica que as chamadas para IoAcquireCancelSpinLock e IoReleaseCancelSpinLock são usadas em alternância estrita. Ou seja, cada chamada para IoAcquireCancelSpinLock deve ter uma chamada correspondente para IoReleaseCancelSpinLock.

CriticalRegions

A regra CriticalRegions especifica que o driver deve chamar KeEnterCriticalRegion antes de chamar KeLeaveCriticalRegion e que o driver chama KeLeaveCriticalRegion antes de qualquer chamada subsequente para KeEnterCriticalRegion. (Chamadas aninhadas são permitidas.)

ExclusiveResourceAccess

A regra ExclusiveResourceAccess especifica que o driver chama ExAcquireResourceExclusiveLite antes de chamar ExReleaseResourceLite ou ExReleaseResourceForThreadLite e especifica que o driver chama ExReleaseResourceLite ou ExReleaseResourceForThreadLite antes de qualquer chamada subsequente para ExAcquireResourceExclusiveLite.

GuardedRegions

A regra GuardedRegions verifica se as chamadas para KeEnterGuardedRegion e KeLeaveGuardedRegion são usadas em alternância estrita.

QueuedSpinLock

A regra QueuedSpinLock especifica que o driver chama KeAcquireInStackQueuedSpinLock antes de chamar KeReleaseInStackQueuedSpinLock e que o driver chama KeReleaseInStackQueuedSpinLock antes de qualquer chamada subsequente para KeAcquireInStackQueuedSpinLock.

QueuedSpinLockRelease

A regra QueuedSpinLockRelease especifica que as chamadas para KeAcquireInStackQueuedSpinLock e KeReleaseInStackQueuedSpinLock são usadas em alternância estrita.

SpinLock

A regra SpinLock especifica que, depois de chamar KeAcquireSpinLock, o driver chama KeReleaseSpinLock antes das chamadas subsequentes para KeAcquireSpinLock ou para KeAcquireSpinLockRaiseToDpc.

SpinLockDpc

A regra SpinLockDpc especifica que as chamadas para KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc e KeReleaseSpinLock devem ser feitas em alternância estrita. Ou seja, depois de chamar KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc, o driver deve chamar KeReleaseSpinLock antes das chamadas subsequentes para KeAcquireSpinLock ou para KeAcquireSpinLockRaiseToDpc.

SpinlockRelease

A regra SpinlockRelease especifica que as chamadas para KeReleaseSpinLock são feitas em alternância estrita com KeAcquireSpinLock e KeAcquireSpinLockRaiseToDpc. Ou seja, o driver deve chamar KeReleaseSpinLock depois de chamar KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc e antes das chamadas subsequentes para KeAcquireSpinLock ou para KeAcquireSpinLockRaiseToDpc.

SpinLockSafe

A regra SpinLockSafe especifica que IoStartNextPacket e IoCompleteRequest não são chamados enquanto mantêm um bloqueio de rotação.

WithinCriticalRegion

A regra WithinCriticalRegion especifica que as chamadas do driver para funções de sincronização específicas aparecem somente depois de chamar KeEnterCriticalRegion e antes de chamar KeLeaveCriticalRegion.

As funções de sincronização afetadas são as seguintes:

Para selecionar o conjunto de regras de bloqueio

  1. Selecione seu projeto de driver (.vcxProj) no Microsoft Visual Studio. No menu Driver , clique em Iniciar Verificador de Driver Estático....

  2. Clique na guia Regras . Em Conjuntos de Regras, selecione Bloqueio.

    Para selecionar o conjunto de regras padrão em uma janela do prompt de comando do desenvolvedor do Visual Studio, especifique Locking.sdv com a opção /marcar. Por exemplo:

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

    Para obter mais informações, consulte Usando o Verificador de Driver Estático para localizar defeitos em drivers e comandos do Verificador de Driver Estático (MSBuild).