Share via


marcar 0xA de bugs: IRQL_NOT_LESS_OR_EQUAL

O bug IRQL_NOT_LESS_OR_EQUAL marcar tem um valor de 0x0000000A. Esse bug marcar indica que o Microsoft Windows ou um driver no modo kernel acessaram a memória paginada em um endereço inválido enquanto estava em um nível de solicitação de interrupção elevado (IRQL). Normalmente, a causa é um ponteiro inválido ou um problema de paginação.

Importante

Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul ao usar o computador, consulte Solucionar erros de tela azul.

parâmetros de IRQL_NOT_LESS_OR_EQUAL

Parâmetro Descrição
1 O endereço de memória virtual que não pôde ser acessado.

Use !pool neste endereço para ver se ele é um pool paginado. Outros comandos que podem ser úteis para coletar informações sobre a falha são !pte, !address e ln (Listar símbolos mais próximos).
2 IRQL no momento da falha.

Valores:
2 - O IRQL foi DISPATCH_LEVEL no momento da falha.
3 Campo de bits que descreve a operação que causou a falha. Observe que o bit 3 só está disponível em chipsets que dão suporte a esse nível de relatório.

Valores do bit 0:
0 – Operação de leitura
1 – Operação de gravação

Valores do bit 3:
0 – Não é uma operação de execução
1 – Executar operação

Valores combinados dos bits 0 e Bit 3:
0x0 – Falha ao tentar LER do endereço no parâmetro 1
0x1 – Falha ao tentar GRAVAR no endereço no parâmetro 1
0x8 – Falha ao tentar EXECUTAR código do endereço no parâmetro 1

Esse valor é causado por:
  • Chamar uma função que não pode ser chamada em DISPATCH_LEVEL enquanto estiver em DISPATCH_LEVEL.
  • Esquecendo de liberar um spinlock.
  • Marcando o código como paginável quando ele não deve ser paginável. Por exemplo, se o código adquire um spinlock ou é chamado em uma chamada de procedimento adiada.
4 O ponteiro de instrução no momento da falha.

Use o comando ln (Listar Símbolos Mais Próximos) nesse endereço para ver o nome da função.

Causa

Esse bug marcar é causado por drivers de dispositivo no modo kernel que usam endereços inadequados.

Esse bug marcar indica que foi feita uma tentativa de acessar um endereço inválido em um IRQL (nível de solicitação de interrupção elevado). A causa é um ponteiro de memória inválido ou um problema de paginação com o código do driver do dispositivo.

As diretrizes gerais que você pode usar para categorizar o tipo de erro de codificação que causou o bug marcar são as seguintes:

  • Se o parâmetro 1 for menor que 0x1000, o problema provavelmente será uma desreferência de ponteiro NULL.

  • Se o !pool relatar que o parâmetro 1 é um pool de páginas (ou outros tipos de memória paginável), o IRQL será muito alto para acessar esses dados. Execute em um IRQL inferior ou aloque os dados no pool nãopagado.

  • Se o parâmetro 3 indicar que o bug marcar foi uma tentativa de executar código paginável, o IRQL será muito alto para chamar essa função. Execute em um IRQL inferior ou não marque o código como paginável.

  • Pode ser um ponteiro inválido causado pelo uso após a liberação ou pela inversão de bits. Investigue a validade do parâmetro 1 com !pte, !address e ln (listar símbolos mais próximos).

Resolução

Se um depurador de kernel estiver disponível, obtenha um rastreamento de pilha. Comece executando a extensão do depurador !analyze para exibir informações sobre o bug marcar. A extensão !analyze pode ser útil para determinar a causa raiz. Em seguida, insira um dos comandos k* (exibir backtrace de pilha) para exibir a pilha de chamadas.

Coletar informações

Examine o nome do driver se ele foi listado na tela azul.

Verifique o Visualizador de Eventos de Logon do Sistema em busca de outras mensagens de erro que possam ajudar a identificar o dispositivo ou driver que está causando o erro. Procure erros críticos no log do sistema que ocorreram no mesmo período que a tela azul.

Driver Verifier

O Verificador de Driver é uma ferramenta executada em tempo real para examinar o comportamento dos drivers. Por exemplo, o Verificador de Driver verifica o uso de recursos de memória, como pools de memória. Se identificar erros na execução do código do driver, ele criará proativamente uma exceção para permitir que essa parte do código do driver seja examinada ainda mais. O Gerenciador de Verificador de Driver é integrado ao Windows e está disponível em todos os computadores Windows.

Para iniciar o Gerenciador de Verificador de Driver, digite verificador em um prompt de comando. Você pode configurar quais drivers verificar. O código que verifica os drivers adiciona sobrecarga à medida que é executado, portanto, tente verificar o menor número possível de drivers. Para obter mais informações, consulte Verificador de Driver.

O código a seguir mostra um exemplo de depuração:

kd> .bugcheck       [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000

kd> kb [Lists the stack trace.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> kv [Lists the trap frames.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
ErrCode = 00000000
00000000 ???????????????    [The current instruction pointer is NULL.]

kd> kb       [Gives the stack trace before the fault.]
ChildEBP RetAddr  Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0

Comentários

O erro que gera esse bug marcar geralmente ocorre após a instalação de um driver de dispositivo com falha, serviço do sistema ou BIOS.

Se você encontrar bugs marcar 0xA durante a atualização para uma versão mais recente do Windows, o erro poderá ser causado por um driver de dispositivo, um serviço do sistema, um scanner de vírus ou uma ferramenta de backup incompatível com a nova versão.

Resolvendo um problema de hardware com falha: Se o hardware tiver sido adicionado ao sistema recentemente, remova-o para ver se o erro se repetirá. Se o hardware existente tiver falhado, remova ou substitua o componente com falha. Execute diagnóstico de hardware fornecidas pelo fabricante do sistema. Para obter detalhes sobre esses procedimentos, consulte o manual do proprietário para seu computador.

Resolvendo um problema de serviço do sistema com falha: Desabilite o serviço e confirme se isso resolve o erro. Nesse caso, entre em contato com o fabricante do serviço do sistema sobre uma possível atualização. Se o erro ocorrer durante a inicialização do sistema, investigue as opções de reparo do Windows. Para obter mais informações, consulte Opções de recuperação no Windows 10.

Resolvendo um problema de software antivírus: Desabilite o programa e confirme se isso resolve o erro. Se isso acontecer, entre em contato com o fabricante do programa sobre uma possível atualização.

Para obter informações gerais sobre como solucionar problemas de verificações de bugs, consulte Dados de tela azul.

Confira também

Referência de código de marcar de bugs