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 |
---|---|
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. |
|
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. |
|
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.) |
|
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. |
|
A regra GuardedRegions verifica se as chamadas para KeEnterGuardedRegion e KeLeaveGuardedRegion são usadas em alternância estrita. |
|
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. |
|
A regra QueuedSpinLockRelease especifica que as chamadas para KeAcquireInStackQueuedSpinLock e KeReleaseInStackQueuedSpinLock são usadas em alternância estrita. |
|
A regra SpinLock especifica que, depois de chamar KeAcquireSpinLock, o driver chama KeReleaseSpinLock antes das chamadas subsequentes para KeAcquireSpinLock ou para KeAcquireSpinLockRaiseToDpc. |
|
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. |
|
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. |
|
A regra SpinLockSafe especifica que IoStartNextPacket e IoCompleteRequest não são chamados enquanto mantêm um bloqueio de rotação. |
|
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
Selecione seu projeto de driver (.vcxProj) no Microsoft Visual Studio. No menu Driver , clique em Iniciar Verificador de Driver Estático....
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).