Conjunto de regras IRQL (WDM)
Use essas regras para verificar se o driver faz chamadas DDI no IRQL necessário.
Um driver que não segue as regras do IRQL pode causar sérios problemas durante a operação que podem levar a condições de deadlock ou falhas no computador.
Nesta seção
Tópico | Descrição |
---|---|
A regra ForwardedAtBadIrql especifica que o driver deve chamar IoCallDriver e PoCallDriver no IRQL<DISPATCH_LEVEL a menos que o código de função principal do IRP que está sendo encaminhado seja um dos seguintes: |
|
A regra ForwardedAtBadIrqlAllocate especifica que o driver deve chamar IoCallDriver e PoCallDriver em IRQL<DISPATCH_LEVEL, a menos que o código de função principal IRP que está sendo encaminhado seja um dos seguintes: |
|
A regra ForwardedAtBadIrqlFsdAsync especifica que o driver chama IoCallDriver e PoCallDriver no IRQL<DISPATCH_LEVEL, a menos que o código de função principal irp que está sendo encaminhado seja um dos seguintes: |
|
A regra ForwardedAtBadIrqlFsdSync especifica que o driver chame IoCallDriver e PoCallDriver em IRQL<DISPATCH_LEVEL, a menos que o código de função principal irp que está sendo encaminhado seja um dos seguintes: |
|
A regra IrqlApcLte especifica que o driver chama ObGetObjectSecurity e ObReleaseObjectSecurity somente quando está sendo executado em IRQL <= APC_LEVEL. |
|
A regra IrqlDispatch especifica que o driver chama os DDIs a seguir somente quando está em execução em IRQL = DISPATCH_LEVEL. |
|
A regra IrqlExAllocatePool especifica que o driver chama ExAllocatePoolWithTag e ExAllocatePoolWithTagPriority somente quando está sendo executado em IRQL<=DISPATCH_LEVEL. |
|
A regra IrqlExApcLte1 especifica que o driver chama ExAcquireFastMutex e ExTryToAcquireFastMutex apenas em IRQL <= APC_LEVEL. |
|
A regra IrqlExApcLte2 especifica que o driver chama as rotinas a seguir apenas em IRQL <= APC_LEVEL. |
|
A regra IrqlExApcLte3 especifica que o driver chama as seguintes rotinas de suporte executivo somente em IRQL <= APC_LEVEL. |
|
A regra IrqlExApcLteInline especifica que os DDIs são chamados apenas em níveis IRQL adequados |
|
A regra IrqlExFree1 especifica que ExFreePool e ExFreePoolWithTag são chamados em IRQL adequado. |
|
A regra IrqlExFree2 especifica que ExFreePool e ExFreePoolWithTag são chamados em IRQL adequado. |
|
A regra IrqlExFree3 especifica que ExFreePool e ExFreePoolWithTag são chamados em IRQL adequado. |
|
A regra IrqlExPassive especifica que o driver chama as seguintes rotinas de suporte executivo somente em IRQL = PASSIVE_LEVEL: A regra IrqlExPassive também especifica que o driver chama ExRaiseStatus em IRQL <= APC_LEVEL |
|
A regra IrqlIoApcLte especifica que o driver chama as seguintes rotinas de gerente de E/S somente quando está em execução em IRQL <= APC_LEVEL: |
|
A regra IrqlIoDispatch especifica que o driver chama as seguintes rotinas do Gerenciador de E/S somente quando está em execução em IRQL <= DISPATCH_LEVEL: IoGetDeviceToVerify, IoSetDeviceToVerify. |
|
A regra IrqlIoPassive1 especifica que o driver chama as seguintes rotinas somente quando está em execução em IRQL = PASSIVE_LEVEL: |
|
A regra IrqlIoPassive2 especifica que o driver chama as seguintes rotinas do Gerenciador de E/S somente em IRQL = PASSIVE_LEVEL: |
|
A regra IrqlIoPassive3 especifica que o driver chama as seguintes rotinas somente quando está em execução em IRQL = PASSIVE_LEVEL: |
|
A regra IrqlIoPassive4 especifica que o driver chama as seguintes rotinas somente quando está sendo executado em IRQL = PASSIVE_LEVEL: |
|
A regra IrqlIoPassive5 especifica que o driver chama rotinas específicas do Gerenciador de E/S somente quando está em execução em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlIoRtlZwPassive especifica que o driver chama rotinas específicas do Gerenciador de E/S somente quando está em execução em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlKeApcLte1 especifica que o driver chama as seguintes rotinas de kernel somente quando está em execução em IRQL <= APC_LEVEL: |
|
A regra IrqlKeApcLte2 especifica que o driver chama as seguintes rotinas de kernel somente quando está em execução em IRQL <= APC_LEVEL: |
|
A regra IrqlKeDispatchLte especifica que o driver chama as seguintes rotinas de kernel somente quando está em execução em IRQL <= DISPATCH_LEVEL: |
|
A regra IrqlKeRaiseLower especifica que o driver faz o seguinte ao gerar e reduzir o IRQL: Quando o driver chama KeRaiseIrql, ele está em execução em um IRQL que é menor ou igual ao valor do parâmetro NewIrql .O driver chama KeLowerIrql somente depois de chamar KeRaiseIrql ou KeRaiseIrqlToDpcLevel. |
|
A regra IrqlKeRaiseLower2 especifica que os drivers usam KeLowerIrql para restaurar o IRQL original gerado por uma chamada anterior para KeRaiseIrql ou KeRaiseIrqlToDpcLevel. |
|
A regra IrqlKeReleaseSpinLock especifica que o driver chama KeReleaseSpinLock somente quando está em execução em IRQL = DISPATCH_LEVEL. |
|
A regra IrqlKeSetEvent especifica que a rotina KeSetEvent só é chamada em IRQL <= DISPATCH_LEVEL quando Wait é definido como FALSE e em IRQL <= APC_LEVEL quando Wait é definido como TRUE. |
|
A regra IrqlKeWaitForMutexObject especifica o driver para chamar a rotina KeWaitForMutexObject no IRQL adequado com base no valor do parâmetro Timeout : |
|
A regra IrqlKeWaitForMultipleObjects especifica que os chamadores da rotina KeWaitForMultipleObjects devem estar em execução no IRQL adequado com base no parâmetro Timeout . |
|
A regra IrqlMmApcLte especifica que o driver chama as seguintes rotinas do gerenciador de memória somente quando está sendo executado em IRQL <= APC_LEVEL: |
|
A regra IrqlMmDispatch especifica que o driver chama MmFreeContiguousMemory somente quando está sendo executado em IRQL <= DISPATCH_LEVEL. |
|
A regra IIrqlNtifsApcPassive especifica que o driver chama os DDIs listados na regra somente quando está executando em IRQL = PASSIVE_LEVEL ou em IRQL <= APC_LEVEL. |
|
A regra IrqlObPassive especifica que o driver chama ObReferenceObjectByHandle somente quando está sendo executado em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlPsPassive especifica que o driver chama as seguintes rotinas de Estrutura de Processo somente quando está em execução em IRQL = PASSIVE_LEVEL: |
|
A regra IrqlReturn especifica que as rotinas de expedição do driver retornam no mesmo IRQL no qual foram chamadas. |
|
A regra IrqlRtlPassive especifica que o driver chama RtlDeleteRegistryValue somente quando está em execução em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlZwPassive especifica que o driver chama ZwClose somente quando está sendo executado em IRQL = PASSIVE_LEVEL. |
Para selecionar o conjunto de regras Irql
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 Irql.
Para selecionar o conjunto de regras padrão em uma janela do prompt de comando do desenvolvedor do Visual Studio, especifique Irql.sdv com a opção /marcar. Por exemplo:
msbuild /t:sdv /p:Inputs="/check:Irql.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).