Informations de référence sur le code de vidage dynamique du noyau

Cette section contient des descriptions des codes de vidage en direct du noyau courants qui peuvent se produire. Les vidages en direct ne réinitialisent pas le système d’exploitation, mais permettent la capture d’informations de mémoire pour les situations anormales où le système d’exploitation peut continuer.

Notes

Cette rubrique s’adresse aux développeurs. Si vous êtes un client dont le système a affiché un écran bleu avec un bogue case activée code, consultez Résoudre les erreurs d’écran bleu.

Vidage dynamique du noyau par rapport au case activée de bogues

Avec une case activée de bogue traditionnelle, le PC se réinitialise et le travail de l’utilisateur est interrompu. L’objectif du vidage dynamique du noyau est de collecter des données pour résoudre les problèmes d’une situation anormale, mais permettre au système d’exploitation de continuer à fonctionner. Cela réduit les temps d’arrêt par rapport à un bogue case activée pour les défaillances et les blocages « non irrécupérables » mais à fort impact. Les vidages dynamiques du noyau sont utilisés lorsqu’il est possible de récupérer le système d’exploitation à un état correct connu. Par exemple, une réinitialisation matérielle d’un sous-système, comme la vidéo/l’affichage, USB3 ou Wi-Fi peut permettre à ces systèmes de revenir à un état correct connu, avec un impact minimal sur l’utilisateur.

Un vidage dynamique du noyau crée une instantané cohérente de la mémoire du noyau et l’enregistre dans un fichier de vidage pour l’analyse future. Pour réduire l’impact sur les performances, des techniques de copie de mémoire sont utilisées pour créer le fichier de vidage dans un court laps de temps. En outre, la collecte de vidages en direct est limitée, de sorte que l’impact sur l’utilisateur est réduit.

Un vidage dynamique du noyau est efficace pour une catégorie de problèmes où quelque chose prend beaucoup de temps, et pourtant rien n’est techniquement défaillant. Un minuteur de surveillance peut être initialisé lorsqu’une opération est démarrée. Si le chien de garde expire avant la fin de l’opération dans le délai prévu, un vidage en direct du système peut être effectué. Ensuite, le vidage peut être analysé en parcourant la pile des appels et la chaîne d’attente associée pour cette opération afin d’examiner pourquoi elle ne se termine pas avec le délai attendu.

Les journaux système fonctionnent bien quand un problème échoue et que le propriétaire de code a enregistré la cause de la défaillance et peut en identifier la cause. Les vidages en direct qui utilisent des minuteurs de surveillance tentent d’intercepter les chemins d’échec qui n’ont pas été anticipés et enregistrés. Mais comme pour chaque défaillance, les journaux système peuvent identifier d’autres problèmes qui peuvent fournir des indices sur la cause racine spécifique de la défaillance.

Contenu du fichier de vidage dynamique du noyau

Comme pour les fichiers de vidage standard, les fichiers de vidage en direct peuvent contenir des minidumps (avec des données secondaires) et des vidages de noyau complets, qui peuvent également inclure de la mémoire en mode utilisateur, similaire aux vidages actifs. Pour obtenir des informations générales sur le contenu des fichiers de vidage, consultez Variétés de Kernel-Mode fichiers de vidage. Certains vidages en direct tentent uniquement de capturer des minidumps, car ils sont conçus pour capturer des données matérielles spécifiques, tandis que d’autres peuvent tenter de capturer un vidage dynamique du noyau plus grand.

Pour les performances, la taille du fichier et la fiabilité des captures de vidage, certaines informations ne sont pas incluses, telles que les pages de la liste stand-by et les caches de fichiers.

Les fichiers de vidage dynamique contiennent généralement des pages de mémoire telles que :

  • KdDebuggerBlock
  • Liste des modules chargés

Pour chaque processeur, les informations suivantes sont capturées dans les vidages du noyau :

  • KiProcessorBlock
  • PRCBs
  • Pile active
  • Table de répertoires de pages actuelles
  • KI_USER_SHARED_DATA
  • Image du noyau NTOS
  • HAL Image

Des informations supplémentaires dans les vidages du noyau peuvent inclure :

  • État du thread/mémoire
  • Journalisation en mémoire

Certains vidages dynamiques peuvent contenir des pages de processus en mode utilisateur.

D’autres données spécifiques au domaine, par exemple des données spécifiques à l’USB pour les défaillances USB, peuvent être incluses pour certains vidages en direct.

Fichier de vidage dynamique du noyau partiel

Un fichier de vidage dynamique du noyau partiel peut être généré dans des situations où le vidage dynamique ne peut pas capturer de manière fiable toutes les pages de mémoire prévues. Les informations capturées dans un vidage partiel sont filtrées et hiérarchisées, en capturant les pages qui contiennent des données importantes nécessaires pour générer un vidage valide avant d’autres pages. Par instance, les pages du noyau sont prioritaires par rapport aux pages utilisateur, lorsque le vidage en direct inclut des pages utilisateur. Dans certains cas, il n’y a pas suffisamment de ressources disponibles pour capturer toutes les pages de mémoire facultatives prévues, de sorte que la mémoire peut manquer dans le fichier de vidage. Le fichier de vidage doit toujours être reconnu par le débogueur WinDbg, mais peut afficher des erreurs lors de la tentative de vidage de la mémoire. Si le débogueur affiche une erreur lors de la tentative de vidage de la mémoire à une adresse, vous pouvez utiliser l’extension !pte pour case activée si la PTE d’une adresse est valide ou non. Cela peut aider à déterminer si l’adresse mémoire n’est vraiment pas valide ou si la page est valide, mais tout simplement pas disponible dans le fichier de vidage.

Analyse des fichiers de vidage dynamique

Lorsqu’un vidage dynamique se produit, le fichier de vidage peut être analysé à l’aide des mêmes techniques que celles utilisées pour d’autres fichiers de vidage mémoire. Pour comprendre le contenu de la mémoire lors d’une défaillance, une connaissance des registres de mémoire du processeur et de la programmation d’assembly est requise.

Pour plus d'informations, consultez les pages suivantes :

Utilisation de WinDbg pour afficher des informations de code d’arrêt de vidage en direct

Si un code de vidage en direct spécifique n’apparaît pas dans cette rubrique, utilisez l’extension !analyze dans le débogueur Windows (WinDbg) avec la syntaxe suivante (en mode noyau), en <code> remplaçant par un code de vidage en direct :

!analyze -show <code>

L’entrée de cette commande permet à WinDbg d’afficher des informations sur le code de vidage en direct spécifié. Si votre base de nombre par défaut (radix) n’est pas 16, préfixez <code>0x.

Fournissez les paramètres de code de vidage en direct à la commande !analyze pour afficher les informations de paramètre disponibles. Par exemple, pour afficher des informations sur la vérification des bogues 0x144 BUGCODE_USB3_DRIVER, avec une valeur de paramètre 1 de 0x3003, utilisez !analyze -show 0x144 0x3003 comme indiqué ici.

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

Pour télécharger WinDbg, consultez Outils de débogage pour Windows. Pour en savoir plus sur les outils de développement WinDbg, consultez Prise en main avec le débogage Windows.

Emplacements des fichiers de vidage dynamique

Par défaut, les vidages dynamiques sont stockés dans le répertoire « C :\WINDOWS\LiveKernelReports ».

Vidages complets : %systemroot%\LiveKernelReports\*.dmp

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

Une structure de répertoires est utilisée pour stocker des vidages dynamiques pour différents composants.

NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG

Clés de Registre de vidage dynamique

Pour plus d’informations sur les options de configuration pour les rapports de noyau en direct générés par le système, consultez Paramètres WER.

Utiliser PowerShell pour déclencher manuellement un vidage dynamique

  1. Ouvrez et invitez Administrateur PowerShell.

  2. Obtenez le nom convivial StorageSubsystem à l’aide de la commande PowerShell Get-StorageSubSystem .

 C:\> Get-StorageSubSystem
 FriendlyName                     HealthStatus OperationalStatus
 ------------                     ------------ -----------------
 Windows Storage on 10-2411-PC    Healthy      OK
  1. Utilisez Get-StorageDiagnosticInfo pour générer un vidage dynamique pour le sous-système ci-dessus (avec d’autres journaux de diagnostic). Pour plus d’informations, consultez Get-StorageDiagnosticInfo.
 C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
  1. La sortie indique que les informations demandées sont générées.
Gathering storage subsystem diagnostic information                                                                         
Running                                                                                                                 
[oooooooooooo                                                                                              ] 
  1. Le vidage se trouve à l’intérieur 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. L’utilisation du débogueur pour exécuter !analyze sur le fichier de vidage indique qu’il s’agit d’un code de vidage dynamique de LIVE_SYSTEM_DUMP (161).

Codes de vidage dynamique du noyau

Le tableau suivant fournit des liens vers les codes de vidage en direct du noyau.

Code Nom
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

Ces codes d’arrêt peuvent être utilisés pour les vidages en direct ou pour boguer case activée l’appareil.

Code Nom
0x00000124 WHEA_UNCORRECTABLE_ERROR
0x00000144 BUGCODE_USB3_DRIVER
0x00000164 WIN32K_CRITICAL_FAILURE

Voir aussi

Référence du Code de vérification de bogue

!Analyser

Conseils généraux pour les écrans bleus

Données d’écran bleu