Compartilhar via


Conjunto de regras de bloqueio (KMDF)

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

Nesta seção

Tópico Descrição

ParentObjectCheckLock

A regra ParentObjectCheckLock especifica que o driver deve chamar WdfWaitLockCreate e WdfSpinLockCreate definindo um objeto pai.

ReqSendWhileSpinlock

A regra ReqSendWhileSpinlock especifica que nenhuma solicitação é enviada enquanto o driver mantém um spinlock.

Spinlock

A regra Spinlock especifica que as chamadas para KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc e KeReleaseSpinlock são usadas em alternância estrita.

SpinlockDpc

A regra SpinlockDpc especifica que as chamadas para KeAcquireSpinLock ou KeAcquireSpinLockRaiseToDpc e KeReleaseSpinlock são usadas em alternância estrita.

SpinlockRelease

A regra SpinlockRelease especifica que as chamadas para KeAcquireSpinLock, KeAcquireSpinLockRaiseToDpc e KeReleaseSpinLock são usadas de maneira equilibrada dentro de um retorno de chamada KMDF. No final de qualquer rotina de retorno de chamada KMDF, o driver não deve manter o bloqueio de rotação.

WdfInterruptLock

A regra WdfInterruptLock especifica que as chamadas para o método WdfInterruptAcquireLock são usadas em alternância estrita com chamadas para WdfInterruptReleaseLock. Além disso, no final de qualquer rotina de retorno de chamada KMDF, o driver não deve manter o objeto de bloqueio de rotação da estrutura, obtido por uma chamada anterior para WdfInterruptAcquireLock.

WdfInterruptLockRelease

A regra WdfInterruptLockRelease especifica que as chamadas para WdfInterruptAcquireLock e WdfInterruptReleaseLock são usadas de maneira equilibrada dentro de uma rotina de retorno de chamada KMDF. No final de qualquer rotina de retorno de chamada KMDF, o driver não deve manter o objeto de bloqueio de rotação da estrutura obtido por uma chamada anterior para WdfInterruptAcquireLock.

WdfSpinlock

A regra WdfSpinlock especifica que as chamadas para o método WdfSpinLockAcquire são usadas em alternância estrita com WdfSpinlockRelease. No final de qualquer rotina de retorno de chamada KMDF, o driver não deve manter o objeto spinlock da estrutura obtido por uma chamada anterior para WdfSpinLockAcquire.

WdfSpinlockRelease

A regra WdfSpinlockRelease especifica que as chamadas para WdfSpinLockAcquire e WdfSpinlockRelease são usadas de maneira equilibrada dentro de uma função de retorno de chamada de evento KMDF. Quando a função de retorno de chamada de evento KMDF retorna, o driver não deve manter o objeto de bloqueio de rotação da estrutura obtido por uma chamada anterior para WdfSpinLockAcquire.

WdfWaitlock

A regra WdfWaitlock especifica que as chamadas para WdfWaitLockAcquire são usadas em alternância estrita com WdfWaitlockRelease. Quando a função de retorno de chamada de evento KMDF retorna, o driver não deve manter o objeto de bloqueio de rotação da estrutura obtido por uma chamada anterior para WdfWaitLockAcquire.

WdfWaitlockRelease

A regra WdfWaitlockRelease especifica que as chamadas para WdfWaitLockAcquire e WdfWaitLockRelease são usadas de maneira equilibrada dentro de uma função de retorno de chamada de evento KMDF. Quando a função de retorno de chamada de evento KMDF retorna, o driver não deve manter o objeto de bloqueio de rotação da estrutura obtido por uma chamada anterior para WdfWaitLockAcquire.

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