Compartilhar via


Conjunto de regras IrpTracking (WDM)

Use essas regras para verificar se o driver rastreia corretamente os pacotes de solicitação de E/S (IRP) para que o dispositivo não seja removido enquanto os IRPs estiverem pendentes.

Nesta seção

Tópico Descrição

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

A regra IoReleaseRemoveLockAndWaitOutsideRemoveDevice especifica que IoReleaseRemoveLockAndWait não deve ser chamado fora IRP_MJ_PNP com IRP_MN_REMOVE_DEVICE para um driver PnP.

NsRemoveLockMnRemove

A regra NsRemoveLockMnRemove verifica se um driver não retorna STATUS_NOT_SUPPORTED ao processar IRP_MJ_PNP com MinorFunction IRP_MN_REMOVE_DEVICE. Esta regra aplica-se apenas aos condutores FDO e FIDO.

NsRemoveLockMnSurpriseRemove

A regra NsRemoveLockMnSurpriseRemove verifica se um driver não retorna STATUS_NOT_SUPPORTED ao processar uma solicitação de IRP_MJ_PNP com o IRP_MN_SUPRISE_REMOVAL minorFunction. Esta regra aplica-se apenas aos condutores FDO e FIDO.

NsRemoveLockQueryMnRemove

A regra NsRemoveLockQueryMnRemove verifica se um driver não retorna STATUS_NOT_SUPPORTED ao processar IRP_MJ_PNP com MinorFunction IRP_MN_QUERY_REMOVE. Esta regra aplica-se apenas aos condutores FDO e FIDO.

RemoveLock

A regra RemoveLock especifica que as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente. Além disso, ao final da rotina IRP_MJ_PNP ou IRP_MJ_POWER, o motorista não deve segurar o RemoveLock.

RemoveLockCheck

A regra RemoveLockCheck verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLockAndWait são usadas corretamente ao processar IRP_MJ_PNP com MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockForward

A regra RemoveLockForward verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP para outro dispositivo.

RemoveLockForward2

A regra RemoveLockForward2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar o IRP para outro dispositivo.

RemoveLockForwardDeviceControl

A regra RemoveLockForwardDeviceControl verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente quando o driver usa IoCallDriver para encaminhar um IRP para outro dispositivo.

RemoveLockForwardDeviceControl2

A regra RemoveLockForwardDeviceControl2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente quando o driver usa IoCallDriver para encaminhar um IRP para outro dispositivo.

RemoveLockForwardDeviceControlInternal

A regra RemoveLockForwardDeviceControlInternal verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo.

RemoveLockForwardDeviceControlInternal2

A regra RemoveLockForwardDeviceControlInternal2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo.

RemoveLockForwardRead

A regra RemoveLockForwardRead verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente.

RemoveLockForwardRead2

A regra RemoveLockForwardRead2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo.

RemoveLockForwardWrite

A regra RemoveLockForwardWrite verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo.

RemoveLockForwardWrite2

A regra RemoveLockForwardWrite2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo.

RemoveLockMnRemove

A regra RemoveLockMnRemove verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLockAndWait são usadas corretamente ao processar IRP_MJ_PNP com MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockMnRemove2

A regra RemoveLockMnRemove2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLockAndWait são usadas corretamente ao processar IRP_MN_REMOVE_DEVICE solicitação antes que o IRP seja encaminhado para drivers inferiores.

RemoveLockMnSurpriseRemove

A regra RemoveLockMnSurpriseRemove verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLockAndWait são usadas corretamente ao processar IRP_MJ_PNP com MinorFunction IRP_MN_SUPRISE_REMOVAL. O driver deve adquirir o bloqueio de remoção antes de encaminhar o IRP para baixo da pilha.

RemoveLockQueryMnRemove

A regra RemoveLockQueryMnRemove verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao processar IRP_MJ_PNP com MinorFunction IRP_MN_QUERY_REMOVE_DEVICE. O driver deve adquirir o bloqueio de remoção antes de encaminhar o IRP para baixo da pilha.

RemoveLockRelease2

A regra RemoveLockRelease2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseCleanup

A regra RemoveLockReleaseCleanup especifica que as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Cada chamada para IoAcquireRemoveLock deve ter uma chamada correspondente para IoReleaseRemoveLock. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseClose

A regra RemoveLockReleaseClose verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseCreate

A regra RemoveLockReleaseCreate verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseDeviceControl

A regra RemoveLockReleaseDeviceControl verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseInternalDeviceControl

A regra RemoveLockReleaseInternalDeviceControl verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleasePnp

A regra RemoveLockReleasePnp verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleasePower

A regra RemoveLockReleasePower verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseRead

A regra RemoveLockReleaseRead verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseShutdown

A regra RemoveLockReleaseShutdown verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseSystemControl

A regra RemoveLockReleaseSystemControl verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

RemoveLockReleaseWrite

A regra RemoveLockReleaseWrite verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas em alternância estrita. Além disso, ao final da rotina de despacho, o motorista não deve segurar a trava de remoção.

Para selecionar o conjunto de regras IrpTracking

  1. Selecione seu projeto de driver (.vcxProj) no Microsoft Visual Studio. No menu Driver, clique em Launch Static Driver Verifier....

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

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

    msbuild /t:sdv /p:Inputs="/check:IrpTracking.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).