Comprobación de errores 0x50: PAGE_FAULT_IN_NONPAGED_AREA

La comprobación de errores de 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 libre.

Importante

Este artículo es para 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): x64

0: Operación de lectura

2: Operación de escritura

10: Ejecución de la operación

Después de Windows 1507 (TH1): x86

0: Operación de lectura

2: Operación de escritura

10: Ejecución de la operación

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

0: Operación de lectura

1: Operación de escritura

8: Ejecución de la operació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 realizó una referencia intentada 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 autor de la llamada intenta acceder a una dirección de sesión incorrectamente sin obtener correctamente una referencia de objeto al proceso correcto y adjuntarla primero. Esta comprobación de errores & subtipo se usó por última vez en Windows 10 RS3. En Windows 10 RS4 y versiones posteriores, este error aparece en su lugar como 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE).

0x04: NONPAGED_BUGCHECK_VA_NOT_CANONICAL: se intentó hacer referencia a una dirección virtual no canónica (ilegal) (parámetro 1). El autor de la llamada no debería estar intentando acceder a esta dirección.

0xF: NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT: el código de 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 memoria en la ubicación (PUNICODE_STRING) KiBugCheckDriver. Puede usar el comando dx del depurador para mostrar esto: 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, como puede un volumen NTFS dañado.

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

Comentarios

Registro de eventos: Compruebe el inicio de sesión del sistema Visor de eventos si hay mensajes de error adicionales que pueden ayudar a identificar el dispositivo o el controlador que está causando el error. Para obtener más información, vea Abrir 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 resuelve el error. Si es así, póngase en contacto con el fabricante del servicio del sistema sobre una posible actualización. Si se produce el error 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 es así, 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 examen de disco en una partición del sistema. Póngase en contacto con la fabricación del sistema de controladores duros para localizar cualquier herramienta de diagnóstico que proporcione para el subsistema de disco duro.

Diagnósticos 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, a continuación, seleccione el Panel de control. En el cuadro de búsqueda, escriba Memoria y, a continuación, seleccione Diagnosticar problemas de memoria del equipo. Una vez ejecutada la prueba, use visor de eventos para ver los resultados en el registro del sistema. Busque la entrada MemoryDiagnostics-Results 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. Debe ejecutar diagnósticos de hardware proporcionados por el fabricante del sistema. Para obtener más información sobre estos procedimientos, consulta el manual del propietario de tu ordenador.

Para obtener información general sobre la solución de problemas de pantalla azul, consulte Datos de pantalla azul y Solución avanzada de problemas de error de detención o error de pantalla azul.

Resolución

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

Normalmente, la dirección a la que se hace referencia está en memoria libre o simplemente no es válida. Esto no se puede proteger mediante un intento, excepto el controlador, 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 los errores comunes cometidos por los desarrolladores de controladores, consulta Procedimientos recomendados de desarrollo de controladores de equipo de Surface.

Use la extensión de depuración !analyze con la opción -v detallado para mostrar información sobre la comprobación de errores para que funcione para determinar la causa principal.

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 !analyze para obtener información sobre lo que estaba ocurriendo cuando se produjo la comprobación de errores. Examine MODULE_NAME: y el FAULTING_MODULE: para ver qué código está implicado en 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 de memoria 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 usar kb (Display Stack Backtrace) para investigar el código de error.

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

Use el comando d, da, db, dc, dd, dD, df, dp, dq, du, dw (Display Memory) 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 este área de memoria en el parámetro 1, que es el área de memoria que estaba intentando leerse.

Use el comando !address para ver el parámetro 3, que es la dirección de la instrucción a la que se hace referencia a 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 (Unassemble)Dissasemble con el parámetro 3, para examinar el objeto al que se hace referencia a la memoria incorrecta. Para obtener más información sobre el procesador X64 y el lenguaje de ensamblado, vea 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 desasociar hacia atrás desde una dirección determinada.

Use el comando r (Registers) para examinar lo que se estaba ejecutando como comprobación del error 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.

El !pte comando y !pool también se puede usar para examinar la memoria.

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

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

Comprobador de controladores

Driver Verifier 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 de forma proactiva 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 comprobador de controladores para realizar un seguimiento de la causa específica de un error.

Para iniciar el administrador del comprobador de controladores, escriba Comprobador en un símbolo del sistema. Puede configurar qué controladores desea comprobar. El código que comprueba que los controladores agregan sobrecarga a medida que se ejecuta, por lo que pruebe y compruebe 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)