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 |
---|---|
A regra IoReleaseRemoveLockAndWaitOutsideRemoveDevice especifica que IoReleaseRemoveLockAndWait não deve ser chamado fora IRP_MJ_PNP com IRP_MN_REMOVE_DEVICE para um driver PnP. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
A regra RemoveLockForward verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP para outro dispositivo. |
|
A regra RemoveLockForward2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar o IRP para outro dispositivo. |
|
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. |
|
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. |
|
A regra RemoveLockForwardDeviceControlInternal verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo. |
|
A regra RemoveLockForwardDeviceControlInternal2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo. |
|
A regra RemoveLockForwardRead verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente. |
|
A regra RemoveLockForwardRead2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo. |
|
A regra RemoveLockForwardWrite verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo. |
|
A regra RemoveLockForwardWrite2 verifica se as chamadas para IoAcquireRemoveLock e IoReleaseRemoveLock são usadas corretamente ao encaminhar um IRP usando IoCallDriver para outro dispositivo. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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
Selecione seu projeto de driver (.vcxProj) no Microsoft Visual Studio. No menu Driver, clique em Launch Static Driver Verifier....
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).