Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Use estas regras para verificar se o driver faz chamadas DDI no IRQL necessário.
Um driver que não segue as regras IRQL pode causar sérios problemas durante a operação que podem levar a condições de bloqueio ou falhas do computador.
Nesta secçã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 da função principal IRP que está sendo encaminhado seja um dos seguintes: |
|
A regra ForwardedAtBadIrqlAllocate especifica que o driver deve chamar IoCallDriver e PoCallDriver no IRQL<DISPATCH_LEVEL, a menos que o código da função principal IRP que está sendo encaminhado seja um dos seguintes: |
|
A regra ForwardedAtBadIrqlFsdAsync especifica que o driver chame IoCallDriver e PoCallDriver no IRQL<DISPATCH_LEVEL, a menos que o código da função principal IRP que está sendo encaminhado seja um dos seguintes: |
|
A regra ForwardedAtBadIrqlFsdSync especifica que o driver chame IoCallDriver e PoCallDriver no IRQL<DISPATCH_LEVEL, a menos que o código da 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 seguintes DDIs apenas quando executado 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 somente em IRQL <= APC_LEVEL. |
|
A regra IrqlExApcLte2 especifica que o driver chama as seguintes rotinas somente 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 DDIs são chamadas apenas em níveis adequados de IRQL |
|
A regra IrqlExFree1 especifica que ExFreePool e ExFreePoolWithTag são chamados no IRQL adequado. |
|
A regra IrqlExFree2 especifica que ExFreePool e ExFreePoolWithTag são chamados no IRQL adequado. |
|
A regra IrqlExFree3 especifica que ExFreePool e ExFreePoolWithTag são chamados no 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 gerenciador de E/S somente quando está sendo executado em IRQL <= APC_LEVEL: |
|
A regra IrqlIoDispatch especifica que o driver chama as seguintes rotinas do Gerenciador de E/S somente quando está sendo executado em IRQL <= DISPATCH_LEVEL: IoGetDeviceToVerify, IoSetDeviceToVerify. |
|
A regra IrqlIoPassive1 especifica que o driver chama as seguintes rotinas somente quando está sendo executado 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á sendo executado 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á sendo executado em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlIoRtlZwPassive especifica que o driver chama rotinas específicas do Gerenciador de E/S somente quando está sendo executado em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlKeApcLte1 especifica que o driver chama as seguintes rotinas do kernel somente quando está sendo executado em IRQL <= APC_LEVEL: |
|
A regra IrqlKeApcLte2 especifica que o driver chama as seguintes rotinas do kernel somente quando está sendo executado em IRQL <= APC_LEVEL: |
|
A regra IrqlKeDispatchLte especifica que o driver chama as seguintes rotinas do kernel somente quando está sendo executado em IRQL <= DISPATCH_LEVEL: |
|
A regra IrqlKeRaiseLower especifica que o driver faz o seguinte ao aumentar e baixar o IRQL: Quando o driver chama KeRaiseIrql, ele está a executar 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á sendo executado em IRQL = DISPATCH_LEVEL. |
|
A regra IrqlKeSetEvent especifica que a rotina KeSetEvent só é chamada em IRQL <= DISPATCH_LEVEL quando Wait está definido como FALSE, e em IRQL <= APC_LEVEL quando Wait está 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 as DDIs listadas na regra somente quando está sendo executado 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 rotinas específicas da Estrutura de Processo somente quando está sendo executado em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlReturn especifica que as rotinas de despacho do motorista retornam no mesmo IRQL em que foram chamadas. |
|
A regra IrqlRtlPassive especifica que o driver chama RtlDeleteRegistryValue somente quando está sendo executado em IRQL = PASSIVE_LEVEL. |
|
A regra IrqlZwPassive especifica que o driver chama ZwClose somente quando ele 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 de prompt de comando do desenvolvedor do Visual Studio, especifique Irql.sdv com a opção /check . 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).