Artigo: 818501 - Última revisão: segunda-feira, 30 de Janeiro de 2012 - Revisão: 1.0

Como depurar um sistema após receber "Stop 0x0000000A (IRQL_NOT_LESS_OR_EQUAL) do código de erro"

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

Este artigo descreve como usar uma sessão de depuração de exemplo para determinar o driver específico que está causando a seguinte mensagem de erro:
Erro de parada IRQL_NOT_LESS_OR_EQUAL (0xA)

Sintomas

Depois de instalar um driver, o sistema pára de responder, e Você recebe a seguinte mensagem de erro no NT!KiActivateWaiterQueue + 0x27:
Erro de parada IRQL_NOT_LESS_OR_EQUAL (0xA)
O rastreamento de pilha inicial indica que o problema está na Driver Fast Fat.

Causa

Esse problema normalmente ocorre porque os drivers chamam um o IoQueueWorkItem função ou o ExQueueWorkItem função duas vezes no item de trabalho mesmo antes que o item de trabalho tenha foi executada.

Drivers de dispositivo que alocam estaticamente tanto o IO_WORKITEM estrutura ou o WORK_QUEUE_ITEM estrutura são particularmente sujeitos a esse problema. Drivers de dispositivo que tal um estático que realizam alocação deve garantir que não tentam Use o item estaticamente alocado enquanto ele já está na fila.

Mais Informação

Para depurar um sistema que parou de responder com o erro. que é mencionado em "Sintomas", execute estas etapas:
  1. Supondo que você instalou um driver chamado, para exemplo, XYZ. sys, o sistema pára de responder e você recebe o erro stop 0xA mencionado anteriormente.
  2. Inicie o depurador com os símbolos corretos e, em seguida Siga o exemplo de depuração é descrito mais adiante neste artigo.

    Este exemplo usa o depurador de kernel. Você pode utilizar KD ou WinDbg. Você também pode usar esse método, permitindo que o verificador de driver.
  3. O kV comando no depurador mostra a pilha. A seguinte pilha Traço indica que WORKER_QUEUE foi corrompido.
    Stack Trace:
    f8979768 804f076c fc502008 ff651fb8 e16de008 nt!KiActivateWaiterQueue+0x27
    f8979790 f8462061 00000000 00000000 00000000 nt!KeWaitForSingleObject+0x198
    f89797ac f8462289 ff651fb8 00000600 ff651fb8 Fastfat!FatWaitSync+0x18
    f897989c f8461e62 ff651fb8 fc502008 e16de008 Fastfat!FatNonCachedIo+0x36b
    f8979a2c f845b6b0 ff651fb8 fc502008 fc502008 Fastfat!FatCommonWrite+0xf29
    f8979a70 804eca36 82378020 fc502008 823d1698 Fastfat!FatFsdWrite+0xaa
    f8979a80 f847f3b8 804f46ad f377404c f8979ab8 nt!IopfCallDriver+0x31
    f8979a90 804eca36 82379a08 e27dac88 f8979aec sr!SrWrite+0xa8
    f8979ad8 804f46ad f376a0a6 823cafb8 82035ca8 nt!IopfCallDriver+0x31
    f8979adc f376a0a6 823cafb8 82035ca8 80570400 nt!IoSetThreadHardErrorMode
  4. Se você revisar a pilha na etapa 3, você pode pensar que Fast Fat é o driver defeituoso. No entanto, o KQUEUE estrutura mostra um corrompido LIST_ENTRY:
    kd> dv
    Queue = ffffffff8054eddc
    kd> dt -r1 _KQUEUE 8054eddc
    +0x000 Header :
    +0x000 Type : 0x4 ''
    +0x001 Absolute : 0 ''
    +0x002 Size : 0xa ''
    +0x003 Inserted : 0 ''
    +0x004 SignalState : 1
    +0x008 WaitListHead : _LIST_ENTRY [ 0x823cb438 - 0x823ca6b0 ]
    +0x010 EntryListHead : [ 0x0 - 0x820ae3c8 ]
    +0x000 Flink : (null)
    +0x004 Blink : 0x820ae3c8 [ 0x0 - 0x8054edec ]
  5. Cancelar a referência a INTERMITÊNCIA estrutura, ela aponta para um WORK_QUEUE_ITEM (aqui, ele é, na verdade, o primeiro parâmetro em um IO_WORKITEM).

    Observação A definição de estrutura para IO_WORKITEM está disponível usando o servidor de símbolos para o Windows XP e posterior versões. A estrutura é a mesma nas versões anteriores do Windows, embora símbolos não estão disponíveis.
    kd> dt -r1 _IO_WORKITEM 820ae3c8
    +0x000 WorkItem :
    +0x000 List : _LIST_ENTRY [ 0x0 - 0x8054edec ]
    +0x008 WorkerRoutine : 0x8057fb78 nt!IopProcessWorkItem+0
    +0x00c Parameter : 0x820ae3c8
    +0x010 Routine : 0xf289dff0 +0
    +0x014 DeviceObject : 0xfe01b110
    +0x000 Type : 0
    +0x002 Size : 0
    +0x004 ReferenceCount : 0
    +0x008 DriverObject : (null)
    +0x00c NextDevice : (null)
    +0x010 AttachedDevice : 0x1fde0970
    +0x014 CurrentIrp : (null)
    +0x018 Timer : (null)
    +0x01c Flags : 0
    +0x020 Characteristics : 0x490049
    +0x024 Vpb : 0x000c0105
    +0x028 DeviceExtension : 0x0001ffff
    +0x02c DeviceType : 0x86a24
    +0x030 StackSize : 8 ''
    +0x034 Queue : __unnamed
    +0x05c AlignmentRequirement : 0x7fffffff
    +0x060 DeviceQueue : _KDEVICE_QUEUE
    +0x074 Dpc : _KDPC
    +0x094 ActiveThreadCount : 0
    +0x098 SecurityDescriptor : (null)
    +0x09c DeviceLock : _KEVENT
    +0x0ac SectorSize : 0
    +0x0ae Spare1 : 0
    +0x0b0 DeviceObjectExtension : (null)
    +0x0b4 Reserved : (null)
    +0x018 Context : 0x81f4a14c 
    Observação O conteúdo do objeto de dispositivo não mostra que ele é válido objeto de dispositivo. No entanto, o Contexto campo é válido e o ! pool comando mostra um Pooltag de Culprit Pool Tag.
  6. Para determinar se o endereço Routine é válido, use o ln comando no endereço de memória. Se você tiver símbolos, o resultado da usando o ln o comando no endereço de memória deve corresponder a um endereço o driver culpado. Portanto, dar um Palpite é que o IO_WORKITEM corresponde a um dispositivo que é feito pelo driver do pool marca.
  7. No código a seguir, a fila de trabalho contém um único item. Portanto, desreferência o INTERMITÊNCIA foi uma maneira fácil de encontrá-lo. Porque a fila de trabalho pode conter. vários itens, você deve cancelar a INTERMITÊNCIA cada item de trabalho até encontrar o trabalho item cuja INTERMITÊNCIA pontos de volta para KQUEUE.
    kd> !pool 81f4a14c
    Pool page 81f4a14c region is Nonpaged pool
    *81f4a140 size: 2b8 previous size: 8 (Allocated) *Culprit Pool Tag

Resolução

Para impedir que o sistema pare com esse erro de parada Desligue e, em seguida, substituir o driver de dispositivo com defeito encontrado por meio do sessão de depuração.
Para obter mais informações informações, clique no número abaixo para ler o artigo no Base de dados de Conhecimento da Microsoft:
314063  (http://support.microsoft.com/kb/314063/ ) Solucionando problemas de um erro de parada 0xA no Windows XP
Para obter mais informações e documentação a partir de Windows DDK, visite os seguintes sites da MSDN:
Bug Check 0xA: IRQL_NOT_LESS_OR_EQUAL
http://msdn2.microsoft.com/en-us/library/ms793589.aspx (http://msdn2.microsoft.com/en-us/library/ms793589.aspx)
IoQueueWorkItem
http://msdn2.microsoft.com/en-us/library/aa490574.aspx (http://msdn2.microsoft.com/en-us/library/aa490574.aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Driver Development Kit
Palavras-chave: 
kbhowto kbkmode kbddk kbmt KB818501 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 818501  (http://support.microsoft.com/kb/818501/en-us/ )