27static void resolveStopCode(
char** s, uint64_t stopcode) {
30 *s =
"DIVIDE_BY_ZERO";
36 *s =
"NON_MASKABLE_INTERRUPT";
48 *s =
"INVALID_OPCODE";
51 *s =
"NO_COPROCESSOR";
57 *s =
"COPROCESSOR_SEGMENT_OVERRUN";
63 *s =
"SEGMENT_SELECTOR_NOTPRESENT";
66 *s =
"STACK_SEGMENT_OVERRUN";
69 *s =
"GENERAL_PROTECTION_FAULT";
78 *s =
"FLOATING_POINT_ERROR";
81 *s =
"ALIGNMENT_CHECK";
84 *s =
"SEVERE_MACHINE_CHECK";
87 *s =
"MEMORY_MAP_SIZE_OVERRUN";
90 *s =
"MANUALLY_INITIATED_CRASH";
96 *s =
"BLOCK_DEVICE_LIMIT_REACHED";
99 *s =
"NULL_POINTER_DEREFERENCE";
102 *s =
"FILESYSTEM_PANIC";
105 *s =
"UNABLE_TO_INIT_TRACELASTFUNC";
108 *s =
"FRAME_LIMIT_REACHED";
111 *s =
"IRQL_NOT_LESS_OR_EQUAL";
114 *s =
"INVALID_IRQL_SUPPLIED";
117 *s =
"NULL_CTX_RECEIVED";
120 *s =
"THREAD_EXIT_FAILURE";
123 *s =
"BAD_AHCI_COUNT";
126 *s =
"AHCI_INIT_FAILED";
129 *s =
"MEMORY_LIMIT_REACHED";
132 *s =
"HEAP_ALLOCATION_FAILED";
138 *s =
"FATAL_IRQL_CORRUPTION";
141 *s =
"THREAD_ID_CREATION_FAILURE";
144 *s =
"ASSERTION_FAILURE";
147 *s =
"FRAME_ALLOCATION_FAILED";
150 *s =
"FRAME_BITMAP_CREATION_FAILURE";
153 *s =
"MEMORY_INVALID_FREE";
156 *s =
"MEMORY_CORRUPT_HEADER";
159 *s =
"MEMORY_DOUBLE_FREE";
162 *s =
"MEMORY_CORRUPT_FOOTER";
165 *s =
"GUARD_PAGE_DEREFERENCE";
168 *s =
"IRQL_NOT_GREATER_OR_EQUAL";
171 *s =
"KERNEL_STACK_OVERFLOWN";
174 *s =
"BAD_POOL_CALLER";
177 *s =
"KMODE_EXCEPTION_NOT_HANDLED";
180 *s =
"ATTEMPTED_SWITCH_FROM_DPC";
183 *s =
"ATTEMPTED_WRITE_TO_READONLY_MEMORY";
186 *s =
"PSMGR_INIT_FAILED";
189 *s =
"PAGE_FAULT_IN_FREED_NONPAGED_POOL";
192 *s =
"PAGE_FAULT_IN_FREED_PAGED_POOL";
195 *s =
"PSWORKER_INIT_FAILED";
198 *s =
"MANUALLY_INITIATED_CRASH2";
201 *s =
"DPC_NOT_INITIALIZED";
204 *s =
"INVALID_PROCESS_ATTACH_ATTEMPT";
207 *s =
"UNKNOWN_BUGCHECK_CODE";
263 gop_printf(0xFFFFFFFF,
"FATAL ERROR: Your system has encountered a fatal error.\n\n");
264 gop_printf(0xFFFFFFFF,
"Your system has been stopped for safety.\n\n");
265 char* stopCodeToStr =
"";
266 resolveStopCode(&stopCodeToStr, BugCheckCode);
269 gop_printf(0xFF00FF00,
" (numerical: %d)**\n", BugCheckCode);
271 gop_printf(0xFFFFA500,
"**Last IRQL: %d**\n", recordedIrql);
275 gop_printf(0xFFFFFF00,
"Current Thread ID: %d\n", currTid);
287 uintptr_t StackLimit = StackBase - StackSize;
289 gop_printf(
COLOR_WHITE,
"Thread Stack Range | %p - %p | Last saved top: %p\n", (
void*)StackLimit, (
void*)StackBase, (
void*)ThreadTop);
307 IN void* BugCheckParameter1,
308 IN void* BugCheckParameter2,
309 IN void* BugCheckParameter3,
310 IN void* BugCheckParameter4
366 gop_printf(0xFFFFFFFF,
"FATAL ERROR: Your system has encountered a fatal error.\n\n");
367 gop_printf(0xFFFFFFFF,
"Your system has been stopped for safety.\n\n");
368 char* stopCodeToStr =
"";
369 resolveStopCode(&stopCodeToStr, BugCheckCode);
372 gop_printf(0xFF00FF00,
" (numerical: %d)**\n", BugCheckCode);
382 (
char*)BugCheckParameter1,
383 (
char*)BugCheckParameter2,
384 (
char*)BugCheckParameter3,
385 (
long long)(intptr_t)BugCheckParameter4);
391 "Parameter 1: (Pointer: %p | Decimal: %lld | Pure Hex: %llx)\n"
392 "Parameter 2: (Pointer: %p | Decimal: %lld | Pure Hex: %llx)\n"
393 "Parameter 3: (Pointer: %p | Decimal: %lld | Pure Hex: %llx)\n"
394 "Parameter 4: (Pointer: %p | Decimal: %lld | Pure Hex: %llx)\n",
395 (
void*)(uintptr_t)BugCheckParameter1, (
long long)(intptr_t)BugCheckParameter1, (
unsigned long long)(uintptr_t)BugCheckParameter1,
396 (
void*)(uintptr_t)BugCheckParameter2, (
long long)(intptr_t)BugCheckParameter2, (
unsigned long long)(uintptr_t)BugCheckParameter2,
397 (
void*)(uintptr_t)BugCheckParameter3, (
long long)(intptr_t)BugCheckParameter3, (
unsigned long long)(uintptr_t)BugCheckParameter3,
398 (
void*)(uintptr_t)BugCheckParameter4, (
long long)(intptr_t)BugCheckParameter4, (
unsigned long long)(uintptr_t)BugCheckParameter4);
404 gop_printf(0xFFFFA500,
"**Last IRQL: %d**\n", recordedIrql);
408 gop_printf(0xFFFFFF00,
"Current Thread ID: %d\n", currTid);
420 uintptr_t StackLimit = StackBase - StackSize;
422 gop_printf(
COLOR_WHITE,
"Thread Stack Range | %p - %p | Last saved top: %p\n", (
void*)StackLimit, (
void*)StackBase, (
void*)ThreadTop);
FORCEINLINE bool InterlockedExchangeBool(volatile bool *target, bool value)
NORETURN void MeBugCheck(IN enum _BUGCHECK_CODES BugCheckCode)
NORETURN void MeBugCheckEx(IN enum _BUGCHECK_CODES BugCheckCode, IN void *BugCheckParameter1, IN void *BugCheckParameter2, IN void *BugCheckParameter3, IN void *BugCheckParameter4)
struct _GOP_PARAMS GOP_PARAMS
void MgAcquireExclusiveGopOwnerShip(void)
void gop_printf(uint32_t color, const char *fmt,...)
void gop_clear_screen(GOP_PARAMS *gop, uint32_t color)
FORCEINLINE void __pause(void)
FORCEINLINE uint64_t __read_rsp(void)
FORCEINLINE void __hlt(void)
FORCEINLINE void __cli(void)
FORCEINLINE uint64_t __read_cr3(void)
void _MeSetIrql(IN IRQL NewIrql)
@ MANUALLY_INITIATED_CRASH
@ NULL_POINTER_DEREFERENCE
@ ATTEMPTED_WRITE_TO_READONLY_MEMORY
@ COPROCESSOR_SEGMENT_OVERRUN
@ PAGE_FAULT_IN_FREED_NONPAGED_POOL
@ IRQL_NOT_GREATER_OR_EQUAL
@ MEMORY_MAP_SIZE_OVERRUN
Custom ones.
@ ATTEMPTED_SWITCH_FROM_DPC
@ KMODE_EXCEPTION_NOT_HANDLED
@ BLOCK_DEVICE_LIMIT_REACHED
@ FRAME_BITMAP_CREATION_FAILURE
@ FRAME_ALLOCATION_FAILED
@ UNABLE_TO_INIT_TRACELASTFUNC
@ THREAD_ID_CREATION_FAILURE
@ PAGE_FAULT_IN_FREED_PAGED_POOL
@ MANUALLY_INITIATED_CRASH2
@ GENERAL_PROTECTION_FAULT
@ SEGMENT_SELECTOR_NOTPRESENT
@ INVALID_PROCESS_ATTACH_ATTEMPT
FORCEINLINE PPROCESSOR MeGetCurrentProcessor(void)
FORCEINLINE PRIVILEGE_MODE MeGetPreviousMode(void)
struct _IPI_PARAMS IPI_PARAMS
#define MI_LARGE_STACK_SIZE
void MhSendActionToCpusAndWait(CPU_ACTION action, IPI_PARAMS parameter)
struct _ITHREAD InternalThread
struct _TRAP_FRAME TrapRegisters
struct _ITHREAD * currentThread
PETHREAD PsGetCurrentThread(void)