Compartir a través de


Referencia de código de volcado en directo de kernel

Esta sección contiene descripciones de códigos comunes de volcado en directo del kernel que pueden producirse. Los volcados en directo no restablecen el sistema operativo, pero permiten la captura de información de memoria para situaciones anómalas en las que el sistema operativo puede continuar.

Nota:

Este tema es para programadores. Si es un cliente cuyo sistema ha mostrado una pantalla azul con un código de comprobación de errores, consulte Solución de errores de pantalla azul.

Volcado en directo del kernel en comparación con la comprobación de errores

Con una comprobación de errores tradicional, el equipo se restablece y el trabajo del usuario se interrumpe. El objetivo del volcado en directo del kernel es recopilar datos para solucionar problemas en una situación anómala, pero permitir que el sistema operativo continúe con la operación. Esto reduce el tiempo de inactividad en comparación con una comprobación de errores para "errores irrecuperables", pero de gran impacto, y bloqueos. Los volcados en directo del kernel se usan cuando es posible recuperar el sistema operativo a un estado correcto conocido. Por ejemplo, un restablecimiento de hardware de un subsistema, como vídeo/pantalla, USB3 o Wi-Fi, puede permitir que esos sistemas vuelvan a un estado correcto conocido, con un impacto mínimo en el usuario.

Un volcado en directo de kernel crea una instantánea coherente de la memoria del kernel y la guarda en un archivo de volcado para el análisis futuro. Para minimizar el impacto en el rendimiento, las técnicas de copia de memoria se usan para crear el archivo de volcado en un breve período de tiempo. Además, la recopilación de volcados en directo se limita, de modo que se minimiza el impacto en el usuario.

Un volcado en directo del kernel es efectivo para una categoría de problemas en los que algo está tardando mucho, y sin embargo nada está fallando técnicamente. Un temporizador de guardián se puede inicializar cuando se inicia una operación. Si el guardián expira antes de que la operación se complete en el tiempo esperado, se puede tomar un volcado en directo del sistema. A continuación, se puede analizar el volcado recorriendo la pila de llamadas y la cadena de espera relacionada de esa operación para investigar por qué no se completa en el tiempo previsto.

Los registros del sistema funcionan bien cuando algo falla y el propietario del código ha registrado la causa del fallo y puede identificar la causa. Los volcados en directo que utilizan temporizadores de guardián intentan detectar rutas de fallo que no se anticiparon ni registraron. Pero como ocurre con todos los fallos, los registros del sistema pueden identificar otros problemas que pueden proporcionar pistas sobre la causa raíz específica del fallo.

Contenido del archivo de volcado en directo del kernel

De forma similar a los archivos de volcado de memoria normales, los archivos de volcado en directo pueden contener minivolcados de memoria (con datos secundarios) y volcados de kernel completos, que también pueden incluir memoria en modo de usuario, similar a volcados activos. Para obtener información general sobre el contenido del archivo de volcado de memoria, consulte Variedades de archivos de volcado en modo kernel. Algunos volcados en directo solo intentan capturar minivolcados, ya que están diseñados para capturar datos específicos relacionados con el hardware, mientras que otros pueden intentar capturar un volcado en directo del kernel más grande.

Por motivos de rendimiento, tamaño del archivo y fiabilidad de las capturas de volcado, no se incluye cierta información, como las páginas de la lista de espera y las cachés de archivos.

Los archivos de volcado en directo normalmente contienen páginas de memoria como:

  • KdDebuggerBlock
  • Lista de módulos cargados

Para cada procesador se captura la siguiente información en los volcados del kernel:

  • KiProcessorBlock
  • PRCBs
  • Pila actual
  • Tabla de directorios de la página actual
  • KI_USER_SHARED_DATA
  • Imagen del kernel de NTOS
  • HAL Image

La información adicional en los volcados del kernel puede incluir:

  • Estado de subproceso y memoria
  • Registro en memoria

Algunos volcados en directo pueden contener páginas de proceso en modo de usuario.

Se pueden incluir datos específicos de dominio adicionales, por ejemplo, datos específicos de USB para errores USB para algunos volcados en directo.

Archivo de volcado en directo del kernel parcial

Se puede generar un archivo de volcado en directo del kernel parcial en situaciones en las que el volcado en directo no puede capturar de forma confiable todas las páginas de memoria deseadas. La información que se captura en un volcado parcial se filtra y prioriza mediante la captura de páginas que contienen datos importantes necesarios para generar un volcado válido antes que otras páginas. Por ejemplo, las páginas del kernel tienen prioridad sobre las páginas de usuario, cuando el volcado en directo incluye páginas de usuario. En algunas situaciones no hay suficientes recursos disponibles para capturar todas las páginas de memoria opcionales deseadas, por lo que es posible que falte memoria del archivo de volcado. El depurador de WinDbg debería seguir reconociendo el archivo de volcado, pero puede mostrar errores al intentar volcar la memoria. Si el depurador muestra un error al intentar volcar la memoria en una dirección, puede usar la extensión !pte para comprobar si el PTE de una dirección es válido o no. Esto puede ayudar a determinar si la dirección de memoria no es válida o si la página es válida pero no está disponible en el archivo de volcado de memoria.

Análisis de archivos de volcado en directo

Cuando se produce un volcado en directo, el archivo de volcado se puede analizar mediante las mismas técnicas que se usan para otros archivos de volcado de memoria. Para comprender el contenido de la memoria durante un error, es necesario conocer los registros de memoria del procesador y la programación del ensamblado.

Para más información, vea:

Uso de WinDbg para mostrar la información del código de detención del volcado en directo

Si un código de volcado en directo específico no aparece en este tema, use la extensión !analyze en el Depurador de Windows (WinDbg) con la sintaxis siguiente (en modo kernel), reemplazando <code> por un código de volcado en directo:

!analyze -show <code>

Al escribir este comando, WinDbg muestra información sobre el código de volcado en directo especificado. Si el número predeterminado base (base) no es 16, añada a <code> el prefijo 0x.

Proporcione los parámetros del código de volcado en directo al comando !analyze para mostrar cualquier información de parámetro disponible. Por ejemplo, para mostrar información sobre la comprobación de errores 0x144 BUGCODE_USB3_DRIVER, con un valor de parámetro 1 de 0x3003, use !analyze -show 0x144 0x3003 como se muestra aquí.

0: kd> !analyze -show 0x144 0x3003
BUGCODE_USB3_DRIVER (144)
This bugcheck usually happens when the USB3 core stack detects an invalid
operation being performed by a USB client. This bugcheck may also occur
due to hardware failure on a USB Boot Device.
Arguments:
Arg1: 0000000000003003, USB3_WER_BUGCODE_USBHUB3_DEVICE_ENUMERATION_FAILURE
	A USB device failed enumeration.
Arg2: 0000000000000000, USBHUB3_LIVEDUMP_CONTEXT
Arg3: 0000000000000000, 0
Arg4: 0000000000000000, 0

Para descargar WinDbg, consulte Herramientas de depuración para Windows. Para obtener más información sobre las herramientas de desarrollo de WinDbg, consulte Introducción a la depuración de Windows.

Ubicaciones de los archivos del volcado en directo

Los volcados en directo se almacenan de forma predeterminada en el directorio "C:\WINDOWS\LiveKernelReports".

Volcados completos: %systemroot%\LiveKernelReports\*.dmp

Minivolcados: %systemroot%\LiveKernelReports\<ComponentName>\*.dmp

Una estructura de directorios se usa para almacenar volcados en directo para distintos componentes.

NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG

Claves del Registro del volcado en directo

Para obtener más información sobre las opciones de configuración para los informes de kernel en directo generados por el sistema, consulte Configuración de WER.

Uso de PowerShell para desencadenar manualmente un volcado en directo

  1. Abra un símbolo del sistema de PowerShell como administrador.

  2. Obtenga el nombre descriptivo StorageSubsystem mediante el comando Get-StorageSubSystem de PowerShell.

 C:\> Get-StorageSubSystem
 FriendlyName                     HealthStatus OperationalStatus
 ------------                     ------------ -----------------
 Windows Storage on 10-2411-PC    Healthy      OK
  1. Use Get-StorageDiagnosticInfo para generar un volcado en directo para el subsistema anterior (junto con otros registros de diagnóstico). Para obtener más información, consulte Get-StorageDiagnosticInfo.
 C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
  1. La salida indicará que se está generando la información solicitada.
Gathering storage subsystem diagnostic information                                                                         
Running                                                                                                                 
[oooooooooooo                                                                                              ] 
  1. El volcado estará dentro de [DestinationPath]\localhost.
 C:\> dir C:\destinationfolder\localhost\*.dmp
   Directory: C:\destinationfolder\localhost
 Mode                LastWriteTime         Length Name
 ----                -------------         ------ ----
 -a----         5/5/2016   1:08 PM      867135488 LiveDump.dmp
  1. El uso del depurador para ejecutar !analyze en el archivo de volcado indicará que se trata de un código de volcado en directo de LIVE_SYSTEM_DUMP (161).

Códigos de volcado en directo del kernel

En la tabla siguiente se proporcionan vínculos a códigos de volcados en directo del kernel.

Código Nombre
0x000000AB SESSION_HAS_VALID_POOL_ON_EXIT
0x00000117 VIDEO_TDR_TIMEOUT_DETECTED
0x00000141 VIDEO_ENGINE_TIMEOUT_DETECTED
0x00000142 VIDEO_TDR_APPLICATION_BLOCKED
0x00000156 WINSOCK_DETECTED_HUNG_CLOSESOCKET_LIVEDUMP
0x0000015C PDC_WATCHDOG_TIMEOUT_LIVEDUMP
0x0000015D SOC_SUBSYSTEM_FAILURE_LIVEDUMP
0x0000015E BUGCODE_NDIS_DRIVER_LIVE_DUMP
0x0000015F CONNECTED_STANDBY_WATCHDOG_TIMEOUT_LIVEDUMP
0x00000161 LIVE_SYSTEM_DUMP
0x00000165 CLUSTER_CSV_STATUS_IO_TIMEOUT_LIVEDUMP
0x00000166 CLUSTER_RESOURCE_CALL_TIMEOUT_LIVEDUMP
0x00000167 CLUSTER_CSV_SNAPSHOT_DEVICE_INFO_TIMEOUT_LIVEDUMP
0x00000168 CLUSTER_CSV_STATE_TRANSITION_TIMEOUT_LIVEDUMP
0x00000169 CLUSTER_CSV_VOLUME_ARRIVAL_LIVEDUMP
0x0000016A CLUSTER_CSV_VOLUME_REMOVAL_LIVEDUMP
0x0000016B CLUSTER_CSV_CLUSTER_WATCHDOG_LIVEDUMP
0x0000016F CLUSTER_CSV_STATE_TRANSITION_INTERVAL_TIMEOUT_LIVEDUMP
0x00000175 PREVIOUS_FATAL_ABNORMAL_RESET_ERROR
0x00000179 CLUSTER_CLUSPORT_STATUS_IO_TIMEOUT_LIVEDUMP
0x0000017C PDC_LOCK_WATCHDOG_LIVEDUMP
0x0000017D PDC_UNEXPECTED_REVOCATION_LIVEDUMP
0x00000187 VIDEO_DWMINIT_TIMEOUT_FALLBACK_BDD
0x00000188 CLUSTER_CSVFS_LIVEDUMP
0x00000190 WIN32K_CRITICAL_FAILURE_LIVEDUMP
0x00000193 VIDEO_DXGKRNL_LIVEDUMP
0x00000195 SMB_SERVER_LIVEDUMP
0x00000198 UFX_LIVEDUMP
0x0000019D CLUSTER_SVHDX_LIVEDUMP
0x000001A1 WIN32K_CALLOUT_WATCHDOG_LIVEDUMP
0x000001A3 CALL_HAS_NOT_RETURNED_WATCHDOG_TIMEOUT_LIVEDUMP
0x000001A4 DRIPS_SW_HW_DIVERGENCE_LIVEDUMP
0x000001A5 USB_DRIPS_BLOCKER_SURPRISE_REMOVAL_LIVEDUMP
0x000001A6 BLUETOOTH_ERROR_RECOVERY_LIVEDUMP
0x000001A7 SMB_REDIRECTOR_LIVEDUMP
0x000001A8 VIDEO_DXGKRNL_BLACK_SCREEN_LIVEDUMP
0x000001A9 DIRECTED_FX_TRANSITION_LIVEDUMP
0x000001B0 VIDEO_MINIPORT_FAILED_LIVEDUMP
0x000001B8 VIDEO_MINIPORT_BLACK_SCREEN_LIVEDUMP
0x000001C4 DRIVER_VERIFIER_DETECTED_VIOLATION_LIVEDUMP
0x000001C5 IO_THREADPOOL_DEADLOCK_LIVEDUMP
0x000001C9 USER_MODE_HEALTH_MONITOR_LIVEDUMP
0x000001CC EXRESOURCE_TIMEOUT_LIVEDUMP
0x000001D1 TELEMETRY_ASSERTS_LIVEDUMP
0x000001D4 UCMUCSI_LIVEDUMP
0x000001E1 DEVICE_DIAGNOSTIC_LOG_LIVEDUMP
0x000001F5 APPLICATION_HANG_KERNEL_LIVEDUMP
0x000021C8 MANUALLY_INITIATED_BLACKSCREEN_HOTKEY_LIVE_DUMP

Estos códigos de detención se pueden usar para volcados en directo o para comprobar el dispositivo.

Código Nombre
0x00000124 WHEA_UNCORRECTABLE_ERROR
0x00000144 BUGCODE_USB3_DRIVER
0x00000164 WIN32K_CRITICAL_FAILURE

Consulte también

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

!analyze

Comprobaciones de errores (pantallas azules)

Análisis de los datos de la comprobación de errores de la pantalla azul