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.
A verificação de bug PAGE_FAULT_IN_NONPAGED_AREA tem um valor de 0x00000050. Isso indica que a memória de sistema inválida foi referenciada. Normalmente, o endereço de memória está errado ou o endereço de memória está apontando para a memória liberada.
Importante
Este artigo é para programadores. Se for um cliente que recebeu um código de erro de ecrã azul enquanto utiliza o computador, consulte Resolução de problemas de erros de ecrã azul.
PAGE_FAULT_IN_NONPAGED_AREA Parâmetros
Parâmetro | Descrição |
---|---|
1 |
Endereço de memória referenciado |
2 |
Após a versão do Windows 1507 (TH1) - x64 0: Operação de leitura 2º: Operação de gravação 10º: Executar operação Após a versão do Windows 1507 (TH1) - x86 0: Operação de leitura 2º: Operação de gravação 10º: Executar operação Após a versão do Windows 1507 (TH1) - Arm 0: Operação de leitura 1º: Operação de gravação 8º: Executar operação Antes do Windows 1507 (TH1) Versão x64 / x86 0: Operação de leitura 1º: Operação de gravação |
3 |
Endereço que fez referência à memória (se conhecida) |
4 |
Tipo de falha de página 0x0 - NONPAGED_BUGCHECK_FREED_PTE - O endereço referenciado está em uma entrada de tabela de página marcada como livre. 0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE O endereço referenciado não tem uma entrada de tabela de página ativa válida. 0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - Foi feita uma tentativa de referência a um endereço de espaço de sessão no contexto de um processo que não tem sessão. Normalmente, isso significa que o chamador está tentando acessar indevidamente um endereço de sessão sem obter corretamente uma referência de objeto para o processo correto e anexá-lo primeiro. Este subtipo de verificação de bugs & foi usado pela última vez no Windows 10 RS3. No Windows 10 RS4 e superior, este erro é apresentado como 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE). 0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Foi tentada uma tentativa de referência a um endereço virtual não canónico (ilegal) (parâmetro 1). O chamador nunca deve estar tentando acessar esse endereço. 0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - O código do modo kernel tentou acessar um endereço virtual de modo de usuário quando esse acesso não é permitido. |
Se o driver responsável pelo erro pode ser identificado, seu nome é impresso na tela azul e armazenado na memória no local (PUNICODE_STRING) KiBugCheckDriver. Você pode usar o comando debugger dx para exibir isso - dx KiBugCheckDriver
.
Motivo
A verificação de bugs 0x50 pode ser causada pela instalação de um serviço de sistema defeituoso ou código de driver defeituoso. O software antivírus também pode desencadear esse erro, assim como um volume NTFS corrompido.
Também pode ocorrer após a instalação de hardware defeituoso ou no caso de falha de hardware instalado (geralmente relacionado a RAM defeituosa, seja memória principal, cache de RAM L2 ou RAM de vídeo).
Observações
Registo de Eventos: Verifique o Log do Sistema no Visualizador de Eventos para obter mensagens de erro adicionais que possam ajudar a identificar o dispositivo ou driver que está causando o erro. Procure erros críticos no log do sistema que ocorreram na mesma janela de tempo da tela azul.
Resolvendo um driver defeituoso: Examine o nome do driver se ele foi listado na tela azul ou está presente no log de eventos. Entre em contato com o fornecedor do driver para ver se um driver atualizado está disponível.
Resolvendo um problema de serviço do sistema defeituoso: Desative o serviço e confirme se isso resolve o erro. Em caso afirmativo, 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.
Resolver um problema de software antivírus: Desative o programa e confirme que isso resolve o erro. Se isso acontecer, entre em contato com o fabricante do programa sobre uma possível atualização.
Resolvendo um problema de volume NTFS corrompido: Execute Chkdsk /f /r para detetar e reparar erros de disco. Você deve reiniciar o sistema antes que a verificação de disco comece em uma partição do sistema. Entre em contato com o fabricante do sistema de driver de disco rígido para localizar quaisquer ferramentas de diagnóstico que eles fornecem para o subsistema de disco rígido.
Diagnóstico de memória do Windows: Execute a ferramenta Diagnóstico de Memória do Windows para testar a memória física. Selecione o botão Iniciar e, em seguida, selecione o Painel de Controlo. Na caixa de pesquisa, escreva Memória e, em seguida, selecione Diagnosticar problemas de memória do computador. Depois que o teste for executado, use o Visualizador de eventos para exibir os resultados no log do sistema. Procure a entrada MemoryDiagnostics-Results para exibir os resultados.
Resolver um problema de hardware defeituoso: Se o hardware tiver sido adicionado ao sistema recentemente, remova-o para ver se o erro se repete. Se o hardware existente tiver falhado, remova ou substitua o componente defeituoso. Você deve executar o diagnóstico de hardware fornecido pelo fabricante do sistema. Para obter detalhes sobre estes procedimentos, consulte o manual do proprietário do seu computador.
Para obter informações gerais sobre solução de problemas de tela azul, consulte Analisar dados de tela azul de verificação de bug e Solução de problemas avançada para erro de parada ou problema de erro de tela azul.
Resolução
Para determinar a causa específica e criar uma correção de código, é necessária experiência de programação e acesso ao código-fonte do módulo com falha.
Normalmente, o endereço referenciado está na memória liberada ou é simplesmente inválido. Isso não pode ser protegido por uma tentativa - exceto manipulador - ele só pode ser protegido por uma sonda ou técnicas de programação semelhantes. Para obter informações sobre manipulação de buffer e testes em drivers de sistema de arquivos, consulte Manipulação de buffer. Para obter informações sobre as práticas recomendadas para o desenvolvimento de drivers e erros comuns cometidos por desenvolvedores de drivers, consulte Práticas recomendadas de desenvolvimento de drivers da equipe do Surface.
Use a extensão !analyze debug com a opção -v verbose para exibir informações sobre a verificação de bugs para trabalhar para determinar a causa raiz.
2: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: ffffffff00000090, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80240d322f9, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 000000000000000c, (reserved)
Neste exemplo, o parâmetro 2 indica que a verificação de bug ocorreu quando uma área da memória estava sendo lida.
Olhe para toda a saída !analyze para obter informações sobre o que estava acontecendo quando a verificação de bug ocorreu. Examine MODULE_NAME: e o FAULTING_MODULE: para ver qual código está envolvido na referência à memória inválida do sistema.
Observe o STACK TEXT para obter pistas sobre o que estava sendo executado quando a falha ocorreu. Se vários arquivos de despejo estiverem disponíveis, compare as informações para procurar um código comum que esteja na pilha.
Use o comando .trap fornecido na saída !analyze para definir o contexto.
TRAP_FRAME: fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)
Use comandos do depurador, como use kb (Display Stack Backtrace) para investigar o código com falha.
Use o para listar lm t n
módulos que são carregados na memória.
Use o comando d, da, db, dc, dd, dD, df, dp, dq, du, dw (Display Memory) para investigar as áreas de memória referenciadas pelo parâmetro 1 e pelo parâmetro 3.
2: kd> db ffffffff00000090
ffffffff`00000090 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000a0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000b0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000c0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000d0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000e0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`000000f0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
ffffffff`00000100 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
Neste caso, não parece que há dados nesta área de memória no parâmetro 1, que é a área de memória que estava tentando ser lida.
Use o comando !address para examinar o parâmetro 3, que é o endereço da instrução que fez referência à memória incorreta.
2: kd> !address fffff80240d322f9
Usage: Module
Base Address: fffff802`40ca8000
End Address: fffff802`415fb000
Region Size: 00000000`00953000
VA Type: BootLoaded
Module name: ntoskrnl.exe
Module path: [\SystemRoot\system32\ntoskrnl.exe]
Use u, ub, uu (Unassemble)Dissasemble com o parâmetro 3, para examinar o que fez referência à memória ruim. Para obter mais informações sobre o processador X64 e a linguagem de montagem, consulte O processador x64.
2: kd> u fffff80240d322f9
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810 mov rcx,qword ptr [rax+10h]
fffff802`40d322fd eb07 jmp nt!RtlSubtreePredecessor+0x16 (fffff802`40d32306)
fffff802`40d322ff 488bc1 mov rax,rcx
fffff802`40d32302 488b4910 mov rcx,qword ptr [rcx+10h]
fffff802`40d32306 4885c9 test rcx,rcx
fffff802`40d32309 75f4 jne nt!RtlSubtreePredecessor+0xf (fffff802`40d322ff)
fffff802`40d3230b c3 ret
fffff802`40d3230c c3 ret
Use ub
para desmontar para trás a partir de um determinado endereço.
Use o comando r (Registers) para examinar o que estava sendo executado conforme o bug do sistema verificado.
2: kd> r
Last set context:
rax=ffffffff00000080 rbx=0000000000000000 rcx=ffffa68337cb7028
rdx=7a107838c48dfc00 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80240d322f9 rsp=ffff840c96510958 rbp=ffffffffffffffff
r8=ffffffffffffffff r9=0000000000000000 r10=7ffffffffffffffc
r11=ffff840c96510a10 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei ng nz na pe nc
cs=0010 ss=0018 ds=0000 es=0000 fs=0000 gs=0000 efl=00010282
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810 mov rcx,qword ptr [rax+10h] ds:ffffffff`00000090=????????????????
Neste caso fffff80240d322f9
está no registro de ponteiro de instrução, rip.
O !pte
comando e !pool
também pode ser usado para examinar a memória.
Use !memusage
e para examinar o estado geral da memória do sistema.
Para obter mais informações sobre o uso da memória do Windows, consulte Windows Internals 7th Edition Part 1 por Pavel Yosifovich, Mark E. Russinovich, David A. Solomon e Alex Ionescu.
Verificador de Driver
Driver Verifier é uma ferramenta que é 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 ele vir erros na execução do código do driver, ele proativamente cria uma exceção para permitir que essa parte do código do driver seja examinada mais detalhadamente. O gerenciador de verificador de driver está integrado ao Windows e está disponível em todos os PCs com Windows. Use o Verificador de Driver para rastrear a causa específica de uma falha.
Para iniciar o gerenciador de verificador de driver, digite Verificador em um prompt de comando. Você pode configurar quais drivers você gostaria de verificar. O código que verifica os drivers adiciona sobrecarga à medida que é executado, portanto, tente verificar o menor número possível de drivers. Se um driver com falha foi identificado, selecione-o. Para obter mais informações, consulte Verificador de Controlador.