Bagikan melalui


Referensi Kode Cadangan Langsung Kernel

Bagian ini berisi deskripsi kode cadangan langsung kernel umum yang mungkin terjadi. Cadangan langsung tidak mengatur ulang OS, tetapi memungkinkan pengambilan informasi memori untuk situasi abnormal di mana sistem operasi dapat dilanjutkan.

Catatan

Topik ini untuk programmer. Jika Anda adalah pelanggan yang sistemnya telah menampilkan layar biru dengan kode pemeriksaan bug, lihat Memecahkan masalah kesalahan layar biru.

Kernel live dump dibandingkan dengan pemeriksaan bug

Dengan pemeriksaan bug tradisional, PC direset dan pekerjaan pengguna terganggu. Tujuan dari kernel live dump adalah untuk mengumpulkan data untuk kesulitan membidik situasi abnormal, tetapi memungkinkan OS untuk melanjutkan operasi. Ini mengurangi waktu henti jika dibandingkan dengan pemeriksaan bug untuk "non-fatal" tetapi kegagalan berdampak tinggi dan macet. Kernel live dump digunakan ketika dimungkinkan untuk memulihkan OS ke keadaan baik yang diketahui. Misalnya reset perangkat keras dari subsistem, seperti video/layar, USB3 atau Wi-Fi dapat memungkinkan sistem tersebut kembali ke keadaan baik yang diketahui, dengan dampak pengguna minimal.

Cadangan langsung kernel membuat rekam jepret memori kernel yang konsisten dan menyimpannya ke file cadangan untuk analisis di masa mendatang. Untuk meminimalkan dampak pada performa, teknik salinan memori digunakan untuk membuat file cadangan dalam waktu singkat. Selain itu, pengumpulan cadangan langsung dibatasi, sehingga dampak pengguna diminimalkan.

Live dump kernel efektif untuk kategori masalah di mana sesuatu membutuhkan waktu lama, namun tidak ada yang gagal secara teknis. Timer pengawas dapat diinisialisasi saat operasi dimulai. Jika pengawas kedaluwarsa sebelum operasi selesai pada waktu yang diharapkan, cadangan langsung sistem dapat diambil. Kemudian cadangan dapat dianalisis dengan melintasi tumpukan panggilan dan rantai tunggu terkait untuk operasi tersebut untuk menyelidiki mengapa tidak selesai dengan jangka waktu yang diharapkan.

Log sistem bekerja dengan baik ketika sesuatu gagal dan pemilik kode telah merekam penyebab kegagalan dan dapat mengidentifikasi penyebabnya. Cadangan langsung yang menggunakan timer pengawas mencoba menangkap jalur kegagalan yang tidak diantisipasi dan dicatat. Tetapi seperti halnya setiap kegagalan, log sistem dapat mengidentifikasi masalah lain yang dapat memberikan petunjuk tentang akar penyebab kegagalan tertentu.

Konten file cadangan langsung kernel

Mirip dengan file cadangan reguler, file cadangan langsung mungkin berisi minidump (dengan data sekunder), dan cadangan kernel penuh, yang mungkin juga mencakup memori mode pengguna, mirip dengan cadangan aktif. Untuk informasi umum tentang konten file cadangan, lihat Varietas file cadangan Kernel-Mode. Beberapa cadangan langsung hanya mencoba menangkap minidump, karena dirancang untuk menangkap data terkait perangkat keras tertentu, sementara yang lain dapat mencoba menangkap cadangan langsung kernel yang lebih besar.

Untuk performa, ukuran file, dan untuk keandalan pengambilan cadangan, beberapa informasi tidak disertakan, seperti halaman dari daftar siaga dan cache file.

File cadangan langsung biasanya berisi halaman memori seperti:

  • KdDebuggerBlock
  • Daftar Modul yang Dimuat

Untuk setiap prosesor, informasi berikut ditangkap dalam cadangan kernel:

  • KiProcessorBlock
  • RRTB
  • Tumpukan saat ini
  • Tabel direktori halaman saat ini
  • KI_USER_SHARED_DATA
  • Gambar Kernel NTOS
  • Gambar HAL

Informasi tambahan dalam cadangan kernel dapat mencakup:

  • Status utas /memori
  • Pengelogan dalam memori

Beberapa cadangan langsung mungkin berisi halaman proses mode pengguna.

Data khusus domain tambahan, misalnya data khusus USB untuk kegagalan USB, dapat disertakan untuk beberapa cadangan langsung.

File cadangan langsung kernel parsial

File cadangan langsung kernel parsial dapat dihasilkan dalam situasi ketika live dump tidak dapat menangkap semua halaman memori yang dimaksudkan dengan andal. Informasi yang diambil dalam cadangan parsial difilter dan diprioritaskan, dengan menangkap halaman yang berisi data penting yang diperlukan untuk menghasilkan cadangan yang valid sebelum halaman lain. Misalnya, halaman kernel diprioritaskan daripada halaman pengguna, ketika live dump menyertakan halaman pengguna. Dalam beberapa situasi, tidak ada cukup sumber daya yang tersedia untuk mengambil semua halaman memori opsional yang dimaksudkan, sehingga memori mungkin hilang dari file cadangan. File cadangan masih harus dikenali oleh debugger WinDbg tetapi mungkin menunjukkan kesalahan saat mencoba membuang memori. Jika debugger menunjukkan kesalahan saat mencoba mencadangkan memori di alamat, Anda dapat menggunakan ekstensi !pte untuk memeriksa apakah PTE untuk alamat valid atau tidak. Ini dapat membantu menentukan apakah alamat memori benar-benar tidak valid, atau jika halaman valid tetapi tidak tersedia dalam file cadangan.

Menganalisis file cadangan langsung

Ketika cadangan langsung terjadi, file cadangan dapat dianalisis menggunakan teknik yang sama yang digunakan untuk file cadangan memori lainnya. Untuk memahami isi memori selama kegagalan, diperlukan pengetahuan tentang pendaftaran memori prosesor dan pemrograman perakitan.

Untuk informasi selengkapnya, lihat:

Menggunakan WinDbg untuk menampilkan informasi kode henti cadangan langsung

Jika kode cadangan langsung tertentu tidak muncul dalam topik ini, gunakan ekstensi !analyze di Windows Debugger (WinDbg) dengan sintaks berikut (dalam mode kernel), mengganti <code> dengan kode cadangan langsung:

!analyze -show <code>

Memasukkan perintah ini menyebabkan WinDbg menampilkan informasi tentang kode live dump yang ditentukan. Jika basis angka default (radix) Anda bukan 16, awali <code> dengan 0x.

Berikan parameter kode cadangan langsung ke perintah !analyze untuk menampilkan informasi parameter yang tersedia. Misalnya, untuk menampilkan informasi tentang 0x144 BUGCODE_USB3_DRIVER Pemeriksaan Bug, dengan parameter 1 nilai 0x3003, gunakan !analyze -show 0x144 0x3003 seperti yang ditunjukkan di sini.

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

Untuk mengunduh WinDbg, lihat Alat Penelusuran Kesalahan untuk Windows. Untuk mempelajari selengkapnya tentang alat pengembangan WinDbg, lihat Memulai Penelusuran Kesalahan Windows.

Lokasi file cadangan langsung

Cadangan langsung secara default disimpan di direktori 'C:\WINDOWS\LiveKernelReports'.

Cadangan penuh: %systemroot%\LiveKernelReports\*.dmp

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

Struktur direktori digunakan untuk menyimpan cadangan langsung untuk komponen yang berbeda.

NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG

Kunci registri cadangan langsung

Untuk informasi selengkapnya tentang opsi konfigurasi untuk laporan kernel langsung yang dihasilkan sistem, lihat Pengaturan WER.

Menggunakan PowerShell untuk memicu cadangan langsung secara manual

  1. Buka dan perintah Administrator PowerShell.

  2. Dapatkan nama ramah StorageSubsystem dengan menggunakan perintah Get-StorageSubSystem PowerShell.

 C:\> Get-StorageSubSystem
 FriendlyName                     HealthStatus OperationalStatus
 ------------                     ------------ -----------------
 Windows Storage on 10-2411-PC    Healthy      OK
  1. Gunakan Get-StorageDiagnosticInfo untuk menghasilkan cadangan langsung untuk subsistem di atas (bersama dengan log diagnostik lainnya). Untuk informasi selengkapnya lihat Get-StorageDiagnosticInfo.
 C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
  1. Output akan menunjukkan bahwa informasi yang diminta sedang dibuat.
Gathering storage subsystem diagnostic information                                                                         
Running                                                                                                                 
[oooooooooooo                                                                                              ] 
  1. Cadangan akan berada di dalam [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. Menggunakan debugger untuk menjalankan !analyze pada file cadangan akan menunjukkan bahwa ini adalah kode cadangan langsung LIVE_SYSTEM_DUMP (161).

Kode cadangan langsung kernel

Tabel berikut ini menyediakan tautan ke kode cadangan langsung kernel.

Kode Nama
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

Kode berhenti ini dapat digunakan untuk cadangan langsung atau untuk memeriksa bug perangkat.

Kode Nama
0x00000124 WHEA_UNCORRECTABLE_ERROR
0x00000144 BUGCODE_USB3_DRIVER
0x00000164 WIN32K_CRITICAL_FAILURE

Lihat juga

Referensi Bug Check Code

!Menganalisis

Tips Umum untuk Layar Biru

Data Layar Biru