From 537fbc8af4c329e965a9d0e05ab97091cb218a4b Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sat, 6 Jun 2026 18:52:05 +0200 Subject: [PATCH] Track kernel panic state --- xtoskrnl/includes/ke/crash.hh | 4 ++++ xtoskrnl/ke/crash.cc | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/xtoskrnl/includes/ke/crash.hh b/xtoskrnl/includes/ke/crash.hh index fa808ce..b37ba2c 100644 --- a/xtoskrnl/includes/ke/crash.hh +++ b/xtoskrnl/includes/ke/crash.hh @@ -17,6 +17,9 @@ namespace KE { class Crash { + private: + STATIC BOOLEAN KernelPanic; + public: STATIC XTAPI VOID HaltSystem(VOID); STATIC XTAPI VOID Panic(IN ULONG Code); @@ -25,6 +28,7 @@ namespace KE IN ULONG_PTR Parameter2, IN ULONG_PTR Parameter3, IN ULONG_PTR Parameter4); + STATIC XTAPI BOOLEAN SystemCrashed(VOID); }; } diff --git a/xtoskrnl/ke/crash.cc b/xtoskrnl/ke/crash.cc index 16cfdd9..dbb56d7 100644 --- a/xtoskrnl/ke/crash.cc +++ b/xtoskrnl/ke/crash.cc @@ -4,6 +4,7 @@ * FILE: xtoskrnl/ke/panic.cc * DESCRIPTION: System shutdown and kernel panic mechanism * DEVELOPERS: Rafal Kupiec + * Aiken Harris */ #include @@ -43,6 +44,7 @@ XTAPI VOID KE::Crash::Panic(IN ULONG Code) { + /* Call panic function */ Panic(Code, 0, 0, 0, 0); } @@ -76,7 +78,28 @@ KE::Crash::Panic(IN ULONG Code, IN ULONG_PTR Parameter3, IN ULONG_PTR Parameter4) { + /* Set kernel panic state */ + KernelPanic = TRUE; + + /* Print error message to debug console */ KD::DebugIo::KdPrint(L"Fatal System Error: 0x%08lx (0x%zx 0x%zx 0x%zx 0x%zx)\nKernel Panic!\n\n", Code, Parameter1, Parameter2, Parameter3, Parameter4); + + /* Halt system */ HaltSystem(); } + +/** + * Determines whether the system has experienced a fatal error and entered a kernel panic state. + * + * @return This routine returns TRUE if the system has halted due to a kernel panic, or FALSE otherwise. + * + * @since XT 1.0 + */ +XTAPI +BOOLEAN +KE::Crash::SystemCrashed(VOID) +{ + /* Return kernel panic state */ + return KernelPanic; +}