Compartir a través de


Comprobación de errores 0x50: PAGE_FAULT_IN_NONPAGED_AREA

La comprobación de errores PAGE_FAULT_IN_NONPAGED_AREA tiene un valor de 0x00000050. Esto indica que se ha hecho referencia a la memoria del sistema no válida. Normalmente, la dirección de memoria es incorrecta o la dirección de memoria apunta a memoria liberada.

Importante

Este artículo va dirigido a programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.

Parámetros de PAGE_FAULT_IN_NONPAGED_AREA

Parámetro Descripción

1

Dirección de memoria a la que se hace referencia

2

Después de Windows 1507 (TH1) versión x64

0: Operación de lectura

2: Operación de escritura

10: Operación de ejecución

Después de Windows 1507 (TH1) versión x86

0: Operación de lectura

2: Operación de escritura

10: Operación de ejecución

Después de Windows 1507 (TH1) versión Arm

0: Operación de lectura

1: Operación de escritura

8: Operación de ejecución

Antes de Windows 1507 (TH1) versión x64 / x86

0: Operación de lectura

1: Operación de escritura

3

Dirección a la que se hace referencia a la memoria (si se conoce)

4

Tipo de error de página

0x0 - NONPAGED_BUGCHECK_FREED_PTE - La dirección a la que se hace referencia está en una entrada de tabla de página marcada como libre.

0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE La dirección a la que se hace referencia no tiene una entrada de tabla de página activa válida.

0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - Se ha intentado hacer referencia a una dirección de espacio de sesión en el contexto de un proceso que no tiene sesión. Normalmente, esto significa que el llamador está intentando acceder a una dirección de sesión sin obtener correctamente una referencia de objeto al proceso correcto y adjuntarla primero. Esta comprobación de errores y subtipo se usó por última vez en Windows 10 RS3. En Windows 10 RS4 y versiones posteriores, este error se muestra como 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE).

0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Se ha intentado hacer referencia a una dirección virtual no canónica (incorrecta) (Parámetro 1). El llamador no debería intentar nunca acceder a esta dirección.

0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - El código en modo kernel intentó acceder a una dirección virtual en modo de usuario cuando no se permite dicho acceso.

Si se puede identificar el controlador responsable del error, su nombre se imprime en la pantalla azul y se almacena en la memoria en la ubicación (PUNICODE_STRING) KiBugCheckDriver. Puede usar el comando dx del depurador para mostrar este - dx KiBugCheckDriver.

Causa

La comprobación de errores 0x50 puede deberse a la instalación de un servicio de sistema defectuoso o código de controlador defectuoso. El software antivirus también puede desencadenar este error, ya que puede ser un volumen NTFS dañado.

También puede producirse después de la instalación de hardware defectuoso o en caso de error de hardware instalado (normalmente relacionado con la RAM defectuosa, ya sea memoria principal, caché de RAM L2 o RAM de vídeo).

Comentarios

Registro de eventos: consulte el registro del sistema en el Visor de eventos para ver otros mensajes de error que puedan ayudarle a identificar el dispositivo o controlador que provoca el error. Para obtener más información, consulte Apertura del visor de eventos. Busque en el registro del sistema errores críticos que se hayan producido en la misma ventana de tiempo que la pantalla azul.

Resolución de un controlador defectuoso: examine el nombre del controlador si aparece en la pantalla azul o está presente en el registro de eventos. Póngase en contacto con el proveedor del controlador para ver si hay disponible un controlador actualizado.

Resolución de un problema de servicio del sistema defectuoso: deshabilite el servicio y confirme que esto resuelve el error. Si es así, póngase en contacto con el fabricante del servicio del sistema sobre una posible actualización. Si el error se produce durante el inicio del sistema, investigue las opciones de reparación de Windows. Para obtener más información, consulte Opciones de recuperación en Windows 10.

Resolución de un problema de software antivirus: deshabilite el programa y confirme que esto resuelve el error. Si lo hace, póngase en contacto con el fabricante del programa sobre una posible actualización.

Resolución de un problema de volumen NTFS dañado: ejecute Chkdsk /f /r para detectar y reparar errores de disco. Debe reiniciar el sistema antes de que comience el análisis de disco en una partición del sistema. Póngase en contacto con el fabricante del sistema de controladores de unidades de disco duro para localizar las herramientas de diagnóstico que proporcionan para el subsistema de disco duro.

Diagnóstico de memoria de Windows: ejecute la herramienta Diagnóstico de memoria de Windows para probar la memoria física. Seleccione el botón Inicio y, después, seleccione Panel de control. En el cuadro de búsqueda, escriba Memoria y, a continuación, seleccione Diagnosticar los problemas de memoria del equipo. Una vez ejecutada la prueba, use el Visor de eventos para ver los resultados en el registro del sistema. Busque la entrada Resultados de MemoryDiagnostics para ver los resultados.

Resolución de un problema de hardware defectuoso: si el hardware se ha agregado recientemente al sistema, quítelo para ver si el error se repite. Si se ha producido un error en el hardware existente, quite o reemplace el componente defectuoso. Debería ejecutar los diagnósticos del hardware proporcionados por el fabricante del sistema. Para obtener más información sobre estos procedimientos, consulte el manual del propietario del equipo.

Para obtener información general sobre la solución de problemas de pantalla azul, consulte Análisis de los datos de la comprobación de errores de la pantalla azul y Solución avanzada de problemas de errores de detención o de pantalla azul.

Solución

Para determinar la causa específica y crear una corrección de código, se requiere experiencia en programación y acceso al código fuente del módulo que falla.

Normalmente, la dirección a la que se hace referencia está en memoria liberada o simplemente no es válida. Esto no se puede proteger mediante un identificador try - except, solo se puede proteger mediante un sondeo o técnicas de programación similares. Para obtener información sobre el control de búferes y los sondeos en los controladores del sistema de archivos, consulte Control de búferes. Para obtener información sobre los procedimientos recomendados para el desarrollo de controladores y errores comunes que cometen los desarrolladores de controladores, consulte Procedimientos recomendados de desarrollo de controladores del equipo de Surface.

Use la extensión de depuración !analyze con la opción detallada -v para mostrar información sobre la comprobación de errores para determinar la causa raíz.

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)

En este ejemplo, el Parámetro 2 indica que se produjo la comprobación de errores cuando se leyó un área de memoria.

Examine todos los resultados de !analyze para obtener información sobre lo que estaba ocurriendo cuando se produjo la comprobación de errores. Examine MODULE_NAME: y FAULTING_MODULE: para ver qué código está implicado al hacer referencia a la memoria del sistema no válida.

Examine STACK TEXT para obtener pistas sobre lo que se estaba ejecutando cuando se produjo el error. Si hay varios archivos de volcado disponibles, compare la información para buscar código común que se encuentra en la pila.

Use el comando .trap proporcionado en la salida !analyze para establecer el contexto.

TRAP_FRAME:  fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)

Use comandos del depurador, como kb Mostrar seguimiento de pila) para investigar el código de error.

Use lm t n para enumerar los módulos que se cargan en la memoria.

Use el comando d, da, db, dc, dd, dD, df, dp, dq, du, dw (Memoria de pantalla) para investigar las áreas de memoria a las que hace referencia el parámetro 1 y el parámetro 3.

2: kd> db ffffffff00000090
ffffffff`00000090  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000a0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000b0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000c0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000d0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000e0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000f0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`00000100  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????

En este caso, no parece que haya datos en esta área de memoria en el parámetro 1, que es el área de memoria que estaba intentando leerse.

Use el comando !address para examinar el parámetro 3, que es la dirección de la instrucción a la que hace referencia la memoria incorrecta.

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 (Desensamblar) con el parámetro 3, para examinar el objeto al que hace referencia la memoria incorrecta. Para obtener más información sobre el procesador X64 y el lenguaje de ensamblado, consulte El procesador 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 desensamblar hacia atrás desde una dirección determinada.

Use el comando r (Registros) para examinar lo que se estaba ejecutando cuando se produjo la comprobación de errores del sistema.

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=????????????????

En este caso fffff80240d322f9 está en el registro del puntero de instrucción, rip.

También se puede usar el comando !pte y !pool para examinar la memoria.

Use !memusage para examinar el estado general de la memoria del sistema.

Para obtener más información sobre el uso de memoria de Windows, consulte Windows Internals 7th Edition Part 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon y Alex Ionescu.

Comprobador de controladores

El Comprobador de controladores es una herramienta que se ejecuta en tiempo real para examinar el comportamiento de los controladores. Por ejemplo, el Comprobador de controladores comprueba el uso de recursos de memoria, como los grupos de memoria. Si ve errores en la ejecución del código de controlador, crea proactivamente una excepción para permitir que esa parte del código del controlador se examine aún más. El Administrador del comprobador de controladores está integrado en Windows y está disponible en todos los equipos Windows. Use el Comprobador de controladores para realizar un seguimiento de la causa específica de un error.

Para iniciar el Administrador del comprobador de controladores, escriba Verifier en un símbolo del sistema. Puede configurar qué controladores desea comprobar. El código que comprueba los controladores añade sobrecarga a medida que se ejecuta, así que intente comprobar el menor número de controladores posible. Si se identificó un controlador con errores, selecciónelo. Para obtener más información, consulte Comprobador de controladores.

Consulte también

Bug Check Code Reference (Referencia de código de comprobación de errores)