Delen via


Kernel Live Dump-codereferentie

Deze sectie bevat beschrijvingen van algemene kernel live dump-codes die kunnen optreden. Livedumps stellen het besturingssysteem niet opnieuw in, maar maken het vastleggen van geheugengegevens mogelijk voor abnormale situaties waarin het besturingssysteem kan doorgaan.

Opmerking

Dit onderwerp is bedoeld voor programmeurs. Als u een klant bent van wie het systeem een blauw scherm met een foutcontrolecode heeft weergegeven, raadpleegt u Problemen met blauw scherm oplossen.

Kernel live-dump vergeleken met bug check

Met een traditionele foutcontrole wordt de pc opnieuw ingesteld en wordt het werk van de gebruiker onderbroken. Het doel van kernel live dump is het verzamelen van gegevens om problemen met een abnormale situatie op te lossen, terwijl het besturingssysteem toestaat om te kunnen blijven functioneren. Dit vermindert de uitvaltijd in vergelijking met een foutencontrole voor 'niet-fatale' maar hoog-impactfouten en vastlopers. Kernel live dumps worden gebruikt wanneer het mogelijk is om het besturingssysteem te herstellen naar een bekende goede toestand. Een hardwareherstel van een subsysteem, zoals video/beeldscherm, USB3 of Wi-Fi kan bijvoorbeeld toestaan dat deze systemen terugkeren naar een bekende goede status, met minimale gevolgen voor de gebruiker.

Een kernel livedump maakt een consistente momentopname van kernelgeheugen en slaat dit op in een dumpbestand voor de toekomstige analyse. Om de impact op de prestaties te minimaliseren, worden geheugenkopietechnieken gebruikt om het dumpbestand in een korte periode te maken. Bovendien wordt de verzameling livedumps beperkt, zodat de impact op de gebruiker wordt geminimaliseerd.

Een kernel live dump is effectief voor een categorie problemen waarbij iets lang duurt, maar er technisch gezien niets foutgaat. Een watchdogtimer kan worden geïnitialiseerd wanneer een bewerking wordt gestart. Als de watchdog verloopt voordat de bewerking binnen de verwachte tijd is voltooid, kan een live dump van het systeem gemaakt worden. Vervolgens kan de dump worden geanalyseerd door de callstack en de gerelateerde wachtketen voor die bewerking te doorlopen om te onderzoeken waarom deze niet binnen het verwachte tijdsframe wordt voltooid.

Systeemlogboeken werken goed wanneer er iets mislukt en de code-eigenaar de oorzaak van de fout heeft vastgelegd en de oorzaak kan identificeren. Livedumps die gebruikmaken van watchdog-timers proberen foutpaden te vangen die niet zijn verwacht en geregistreerd. Maar net als bij elke fout kunnen de systeemlogboeken andere problemen identificeren die aanwijzingen kunnen geven voor de specifieke hoofdoorzaak van de fout.

Inhoud van kernel livedumpbestand

Net als bij normale dumpbestanden kunnen livedumpbestanden minidumps bevatten (met secundaire gegevens) en volledige kerneldumps, die mogelijk ook geheugen van de gebruikersmodus bevatten, vergelijkbaar met actieve dumps. Zie Variëteiten van Kernel-Mode Dump-bestanden voor algemene informatie over de inhoud van het dumpbestand. Sommige livedumps proberen alleen minidumps vast te leggen, omdat ze zijn ontworpen om specifieke hardwaregerelateerde gegevens vast te leggen, terwijl anderen kunnen proberen een grotere kernel livedump vast te leggen.

Voor prestaties, bestandsgrootte en betrouwbaarheid van dump-opnamen wordt sommige informatie niet opgenomen, zoals pagina's uit de stand-bijlijst en bestandscaches.

Livedumpbestanden bevatten doorgaans geheugenpagina's zoals:

  • KdDebuggerBlock
  • Lijst met geladen modules

Voor elke processor worden de volgende gegevens vastgelegd in kerneldumps:

  • KiProcessorBlock
  • PRCB's
  • Huidige stack
  • Huidige paginamaptabel
  • KI_USER_SHARED_DATA
  • NTOS-kernelinstallatiekopieën
  • HAL-afbeelding

Aanvullende informatie in kerneldumps kan het volgende omvatten:

  • Thread- en geheugenstatus
  • Logboekregistratie in het geheugen

Sommige live dumps kunnen gebruikersmodus-procespagina's bevatten.

Aanvullende domeinspecifieke gegevens, zoals USB-specifieke gegevens bij USB-storingen, kunnen in sommige live-dumps worden opgenomen.

Gedeeltelijk kernel-live-dumpbestand

Er kan een gedeeltelijk kernel-livedumpbestand worden gegenereerd in situaties waarin livedump niet op betrouwbare wijze alle beoogde geheugenpagina's kan vastleggen. De informatie die wordt vastgelegd in een gedeeltelijke dump, wordt gefilterd en geprioriteerd door pagina's vast te leggen die belangrijke gegevens bevatten die nodig zijn om een geldige dump te genereren vóór andere pagina's. De kernelpagina's krijgen bijvoorbeeld prioriteit boven gebruikerspagina's wanneer de livedump gebruikerspagina's bevat. In sommige situaties zijn er onvoldoende resources beschikbaar om alle beoogde optionele geheugenpagina's vast te leggen, zodat het geheugen mogelijk ontbreekt in het dumpbestand. Het dumpbestand moet nog steeds worden herkend door het WinDbg-foutopsporingsprogramma, maar kan fouten weergeven bij het dumpen van geheugen. Als in het foutopsporingsprogramma een fout wordt weergegeven bij het dumpen van geheugen op een adres, kunt u de extensie !pte gebruiken om te controleren of de PTE voor een adres geldig is of niet. Dit kan helpen om te bepalen of het geheugenadres echt ongeldig is of als de pagina geldig is, maar alleen niet beschikbaar is in het dumpbestand.

Livedumpbestanden analyseren

Wanneer er een livedump optreedt, kan het dumpbestand worden geanalyseerd met behulp van dezelfde technieken die worden gebruikt voor andere geheugendumpbestanden. Om inzicht te hebben in de inhoud van het geheugen tijdens een fout, is kennis van processorgeheugenregisters en assemblyprogrammering vereist.

Voor meer informatie, zie:

WinDbg gebruiken om informatie over stopcodes van live dump weer te geven

Als een specifieke livedumpcode niet wordt weergegeven in dit onderwerp, gebruikt u de extensie !analyze in het Windows Debugger (WinDbg) met de volgende syntaxis (in kernelmodus), waarbij u vervangt <code> door een livedumpcode:

!analyze -show <code>

Als u deze opdracht invoert, geeft WinDbg informatie weer over de opgegeven livedumpcode. Als uw standaardnummerbasis (radix) niet 16 is, moet u het voorvoegsel <code>0x gebruiken.

Geef de parameters voor live dump code op voor de opdracht !analyze om eventuele beschikbare parameterinformatie weer te geven. Als u bijvoorbeeld informatie wilt weergeven over bugcontrole 0x144 BUGCODE_USB3_DRIVER, met een parameter 1-waarde van 0x3003, gebruikt u !analyze -show 0x144 0x3003 zoals hier weergegeven.

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

Om WinDbg te downloaden, zie Hulpprogramma's voor foutopsporing voor Windows. Zie Aan de slag met Windows-foutopsporing voor meer informatie over de WinDbg-ontwikkelhulpprogramma's.

Locaties van live-dumpbestanden

De live-kerneldumps worden standaard opgeslagen in de map 'C:\WINDOWS\LiveKernelReports'.

Volledige dumps: %systemroot%\LiveKernelReports\*.dmp

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

Een mapstructuur wordt gebruikt voor het opslaan van live dumps voor verschillende onderdelen.

NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG

Registersleutels voor live-dumps

Zie WER-instellingen voor meer informatie over configuratieopties voor door het systeem gegenereerde live kernelrapporten.

PowerShell gebruiken om handmatig een livedump te activeren

  1. Open een beheerders PowerShell-promptvenster.

  2. Haal de vriendelijke naam van het StorageSubsystem op met de PowerShell-opdracht Get-StorageSubSystem.

 C:\> Get-StorageSubSystem
 FriendlyName                     HealthStatus OperationalStatus
 ------------                     ------------ -----------------
 Windows Storage on 10-2411-PC    Healthy      OK
  1. Gebruik Get-StorageDiagnosticInfo om een livedump te genereren voor het bovenstaande subsysteem (samen met andere diagnostische logboeken). Zie Get-StorageDiagnosticInfo voor meer informatie.
 C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
  1. De uitvoer geeft aan dat de aangevraagde informatie wordt gegenereerd.
Gathering storage subsystem diagnostic information                                                                         
Running                                                                                                                 
[oooooooooooo                                                                                              ] 
  1. De dump zal binnen [DestinationPath]\localhost zijn.
 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. Als u het foutopsporingsprogramma gebruikt om !analyze uit te voeren op het dumpbestand, wordt aangegeven dat dit een livedumpcode van LIVE_SYSTEM_DUMP (161) is.

Kernel live dump codes

De volgende tabel bevat koppelingen naar live dumps-codes voor kernels.

Code Naam
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 (Handmatig geïnitieerde zwartscherm sneltoets live dump)

Deze stopcodes kunnen worden gebruikt voor live-dumps of om een bugcontrole van het apparaat uit te voeren.

Code Naam
0x00000124 WHEA_UNCORRECTABLE_ERROR
0x00000144 BUGCODE_USB3_DRIVER
0x00000164 WIN32K_CRITICAL_FAILURE

Zie ook

Bug Check Code Reference (Overzicht van bugcontrolecodes)

!analyze

Foutcontroles (blauwe schermen)

Bug Check Blue Screen-gegevens analyseren