31 #define TAG_KNMI 'IMNK' 59 NextEntry = ListHead->
Flink;
63 while (NextEntry != ListHead)
69 if ((
i <= 2) && (DriversOnly !=
FALSE))
72 NextEntry = NextEntry->
Flink;
82 NextEntry = NextEntry->
Flink;
83 ImageBase =
Entry->DllBase;
94 if (
i <= 2) *InKernel =
TRUE;
119 Teb->ProcessEnvironmentBlock->Ldr->InLoadOrderModuleList;
122 NextEntry = ListHead->
Flink;
126 while (NextEntry != ListHead)
134 NextEntry = NextEntry->
Flink;
135 ImageBase =
Entry->DllBase;
160 PVOID Frames[2 * 64];
174 if (FrameCount <= FramesToSkip)
return 0;
180 if ((FramesToSkip +
i) >= FrameCount)
break;
183 BackTrace[
i] = Frames[FramesToSkip +
i];
210 for (
i = 0;
i < FrameCount;
i++)
263 ULONG RealFrameCount;
266 if (!FrameCount || FrameCount > 32) FrameCount = 32;
277 DPRINT1(
"RealFrameCount =%lu\n", RealFrameCount);
283 if (FrameCount - RealFrameCount > 0)
311 ResourceInfo.
Type = 11;
312 ResourceInfo.
Name = 1;
367 (BugCheckCode <= KiBugCodeMessages->Blocks[
i].HighId))
389 while ((
Length > 0) && ((BugCode[
Length - 1] ==
'\n') ||
390 (BugCode[
Length - 1] ==
'\r') ||
404 OutputString->Buffer = BugCode;
405 OutputString->Length =
Length;
406 OutputString->MaximumLength =
Length;
445 LastEntry = ListHead;
446 NextEntry = ListHead->
Flink;
447 while (NextEntry != ListHead)
457 if (CurrentRecord->
Entry.
Blink != LastEntry)
return;
459 Checksum += (
ULONG_PTR)CurrentRecord->Buffer;
465 (CurrentRecord->
Checksum == Checksum))
483 LastEntry = NextEntry;
484 NextEntry = NextEntry->
Flink;
524 i = Unicode->Length /
sizeof(
WCHAR);
528 pw = Unicode->Buffer;
530 while (
i--) *
p++ = (
CHAR)*pw++;
555 for (
i = 0;
i < ParameterCount;
i++)
565 DPRINT1(
"Potentially unloaded driver!\n");
583 "%s** %12s - Address %p base at %p, DateStamp %08lx\r\n",
584 FirstRun ?
"\r\n*":
"*",
591 if (ParameterCount <= 1)
661 if (MessageId == BUGCODE_PSS_MESSAGE)
681 "\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n",
735 if (BugCheckCode == POWER_FAILURE_SIMULATE)
754 switch (BugCheckCode)
757 case UNEXPECTED_KERNEL_MODE_TRAP:
758 case DRIVER_CORRUPTED_EXPOOL:
760 case ACPI_BIOS_FATAL_ERROR:
761 case THREAD_STUCK_IN_DEVICE_DRIVER:
763 case FAT_FILE_SYSTEM:
764 case NO_MORE_SYSTEM_PTES:
765 case INACCESSIBLE_BOOT_DEVICE:
768 MessageId = BugCheckCode;
772 case KERNEL_MODE_EXCEPTION_NOT_HANDLED:
773 case SYSTEM_THREAD_EXCEPTION_NOT_HANDLED:
774 case KMODE_EXCEPTION_NOT_HANDLED:
777 MessageId = KMODE_EXCEPTION_NOT_HANDLED;
781 case NTFS_FILE_SYSTEM:
784 MessageId = FAT_FILE_SYSTEM;
788 case DRIVER_CORRUPTED_MMPOOL:
791 MessageId = DRIVER_CORRUPTED_EXPOOL;
798 MessageId = BUGCODE_PSS_MESSAGE_SIGNATURE;
805 MessageId = BUGCODE_PSS_MESSAGE;
817 switch (BugCheckCode)
820 case KERNEL_MODE_EXCEPTION_NOT_HANDLED:
821 case ATTEMPTED_WRITE_TO_READONLY_MEMORY:
822 case ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY:
828 if (BugCheckParameter3) TrapFrame = (
PVOID)BugCheckParameter3;
833 (BugCheckCode != KERNEL_MODE_EXCEPTION_NOT_HANDLED))
842 case IRQL_NOT_LESS_OR_EQUAL:
852 Pc = (
PVOID)BugCheckParameter4;
888 SYSTEM_SCAN_AT_RAISED_IRQL_CAUGHT_IMPROPER_DRIVER_UNLOAD;
904 case FATAL_UNHANDLED_HARD_ERROR:
907 HardErrorParameters = (
PULONG_PTR)BugCheckParameter2;
916 HardErrCaption = (
PCHAR)BugCheckParameter3;
917 HardErrMessage = (
PCHAR)BugCheckParameter4;
922 case PAGE_FAULT_IN_NONPAGED_AREA:
931 if (BugCheckParameter3) TrapFrame = (
PVOID)BugCheckParameter3;
961 ? PAGE_FAULT_IN_FREED_SPECIAL_POOL
962 : DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL;
967 ? PAGE_FAULT_BEYOND_END_OF_ALLOCATION
968 : DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION;
971 else if (!DriverBase)
980 DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS;
987 case DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS:
990 Pc = (
PVOID)BugCheckParameter1;
994 case DRIVER_USED_EXCESSIVE_PTES:
997 LdrEntry = (
PVOID)BugCheckParameter1;
1002 case THREAD_STUCK_IN_DEVICE_DRIVER:
1039 DbgPrint(
"\n*** Fatal System Error: 0x%08lx\n" 1040 " (0x%p,0x%p,0x%p,0x%p)\n\n",
1054 DbgPrint(
"Driver at fault: %s.\n", AnsiName);
1061 if (HardErrCaption)
DbgPrint(HardErrCaption);
1062 if (HardErrMessage)
DbgPrint(HardErrMessage);
1173 NmiData = NmiData->
Next;
1336 if (!NmiData)
return NULL;
1341 NmiData->
Handle = NmiData;
1371 NmiData = *Previous;
1380 *Previous = NmiData->
Next;
1385 Previous = &NmiData->
Next;
1386 NmiData = *Previous;
#define KeGetCurrentIrql()
BOOLEAN KdDebuggerEnabled
BOOLEAN NTAPI KeGetBugMessageText(IN ULONG BugCheckCode, OUT PANSI_STRING OutputString OPTIONAL)
static int Hash(const char *)
#define MESSAGE_RESOURCE_UNICODE
KBUGCHECK_CALLBACK_REASON Reason
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
PUNICODE_STRING KiBugCheckDriver
#define KeRaiseIrql(irql, oldIrql)
PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
#define KeLowerIrql(oldIrql)
LONG KeBugCheckOwnerRecursionCount
_In_ ULONG _In_ ULONG _In_ ULONG Length
BOOLEAN NTAPI KeRegisterBugCheckReasonCallback(IN PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, IN KBUGCHECK_CALLBACK_REASON Reason, IN PUCHAR Component)
BOOLEAN KdbSymPrintAddress(IN PVOID Address, IN PCONTEXT Context)
Print address...
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
ACPI_SIZE strlen(const char *String)
IN BOOLEAN OUT PSTR Buffer
PMESSAGE_RESOURCE_DATA KiBugCodeMessages
FORCEINLINE VOID KiReleaseNmiListLock(IN KIRQL OldIrql)
_In_ ULONG FramesToCapture
struct _LIST_ENTRY * Blink
BOOLEAN NTAPI InbvDisplayString(IN PCHAR String)
#define DBG_STATUS_BUGCHECK_FIRST
NTSTATUS NTAPI KeInitializeCrashDumpHeader(IN ULONG Type, IN ULONG Flags, OUT PVOID Buffer, IN ULONG BufferSize, OUT ULONG BufferNeeded OPTIONAL)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
ULONG_PTR KiBugCheckData[5]
VOID NTAPI InbvSolidColorFill(IN ULONG Left, IN ULONG Top, IN ULONG Right, IN ULONG Bottom, IN ULONG Color)
VOID NTAPI KiDoBugCheckCallbacks(VOID)
#define InsertTailList(ListHead, Entry)
NTSYSAPI VOID NTAPI RtlCaptureContext(_Out_ PCONTEXT ContextRecord)
#define DECLSPEC_NORETURN
#define STATUS_INVALID_HANDLE
PVOID NTAPI KiRosPcToUserFileHeader(IN PVOID Pc, OUT PLDR_DATA_TABLE_ENTRY *LdrEntry)
KBUGCHECK_CALLBACK_ROUTINE * PKBUGCHECK_CALLBACK_ROUTINE
struct _KNMI_HANDLER_CALLBACK * Next
VOID NTAPI MmMakeKernelResourceSectionWritable(VOID)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define sprintf(buf, format,...)
VOID NTAPI KeRosDumpStackFrames(IN PULONG_PTR Frame OPTIONAL, IN ULONG FrameCount OPTIONAL)
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
struct _MESSAGE_RESOURCE_ENTRY * PMESSAGE_RESOURCE_ENTRY
_Must_inspect_result_ _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine
BOOLEAN KdDebuggerNotPresent
VOID NTAPI KiBugCheckDebugBreak(IN ULONG StatusCode)
KBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
KSPIN_LOCK KiNmiCallbackListLock
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
VOID NTAPI KiDumpParameterImages(IN PCHAR Message, IN PULONG_PTR Parameters, IN ULONG ParameterCount, IN PKE_BUGCHECK_UNICODE_TO_ANSI ConversionRoutine)
#define InterlockedCompareExchangePointer
#define EXCEPTION_EXECUTE_HANDLER
#define DBG_STATUS_BUGCHECK_SECOND
PKNMI_HANDLER_CALLBACK KiNmiCallbackListHead
_In_ ULONG _Out_opt_ PULONG BackTraceHash
PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
#define ACPI_BIOS_ERROR(plist)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
VOID NTAPI KeEnterKernelDebugger(VOID)
NTSTATUS NTAPI LdrFindResource_U(_In_ PVOID BaseAddress, _In_ PLDR_RESOURCE_INFO ResourceInfo, _In_ ULONG Level, _Out_ PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry)
KBUGCHECK_REASON_CALLBACK_ROUTINE * PKBUGCHECK_REASON_CALLBACK_ROUTINE
PLOADER_PARAMETER_BLOCK KeLoaderBlock
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
VOID NTAPI InbvSetTextColor(IN ULONG Color)
NTSTATUS NTAPI LdrAccessResource(_In_ PVOID BaseAddress, _In_ PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry, _Out_opt_ PVOID *Resource, _Out_opt_ PULONG Size)
#define RtlFillMemoryUlong(dst, len, val)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
BOOLEAN NTAPI MmIsSpecialPoolAddressFree(IN PVOID P)
struct _LIST_ENTRY * Flink
VOID NTAPI DbgUnLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
PCHAR(NTAPI * PKE_BUGCHECK_UNICODE_TO_ANSI)(IN PUNICODE_STRING Unicode, IN PCHAR Ansi, IN ULONG Length)
UCHAR Text[ANYSIZE_ARRAY]
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS NTAPI KdEnableDebuggerWithLock(IN BOOLEAN NeedLock)
#define NT_SUCCESS(StatCode)
LIST_ENTRY PsLoadedModuleList
static tBugCheckData BugCheckData
PVOID NTAPI KiPcToFileHeader(IN PVOID Pc, OUT PLDR_DATA_TABLE_ENTRY *LdrEntry, IN BOOLEAN DriversOnly, OUT PBOOLEAN InKernel)
KSPIN_LOCK BugCheckCallbackLock
KDDEBUGGER_DATA64 * KdDebuggerDataBlock
UNICODE_STRING KeRosBiosDate
LIST_ENTRY KeBugcheckReasonCallbackListHead
VOID NTAPI KiDisplayBlueScreen(IN ULONG MessageId, IN BOOLEAN IsHardError, IN PCHAR HardErrCaption OPTIONAL, IN PCHAR HardErrMessage OPTIONAL, IN PCHAR Message)
VOID NTAPI HalReturnToFirmware(IN FIRMWARE_REENTRY Action)
KPROCESSOR_STATE ProcessorState
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI InbvAcquireDisplayOwnership(VOID)
NMI_CALLBACK * PNMI_CALLBACK
#define InterlockedDecrement
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
VOID NTAPI KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
DECLSPEC_NORETURN VOID NTAPI KeBugCheckWithTf(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4, IN PKTRAP_FRAME TrapFrame)
#define KeGetTrapFramePc(TrapFrame)
BOOLEAN NTAPI KeDeregisterBugCheckCallback(IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
VOID FASTCALL KiIpiSend(KAFFINITY TargetSet, ULONG IpiRequest)
SECURITY_INTEGER TimeStamp
UNICODE_STRING KeRosVideoBiosDate
LIST_ENTRY LoadOrderListHead
BOOLEAN NTAPI InbvEnableDisplayString(IN BOOLEAN Enable)
BOOLEAN NTAPI InbvIsBootDriverInstalled(VOID)
UNICODE_STRING KeRosVideoBiosVersion
#define RESOURCE_DATA_LEVEL
BOOLEAN NTAPI InbvResetDisplay(VOID)
#define InterlockedIncrement
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOLEAN NTAPI KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock)
UNICODE_STRING KeRosProcessorName
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
ULONG NTAPI RtlWalkFrameChain(OUT PVOID *Callers, IN ULONG Count, IN ULONG Flags)
MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY]
USHORT NTAPI KeRosCaptureUserStackBackTrace(IN ULONG FramesToSkip, IN ULONG FramesToCapture, OUT PVOID *BackTrace, OUT PULONG BackTraceHash OPTIONAL)
LIST_ENTRY KeBugcheckCallbackListHead
PCHAR NTAPI KeBugCheckUnicodeToAnsi(IN PUNICODE_STRING Unicode, OUT PCHAR Ansi, IN ULONG Length)
UNICODE_STRING BaseDllName
FORCEINLINE VOID KiAcquireNmiListLock(OUT PKIRQL OldIrql)
PVOID MmHighestUserAddress
VOID NTAPI KiInitializeBugCheck(VOID)
VOID NTAPI InbvInstallDisplayStringFilter(IN INBV_DISPLAY_STRING_FILTER Filter)
BOOLEAN NTAPI KeRegisterBugCheckCallback(IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord, IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, IN PVOID Buffer, IN ULONG Length, IN PUCHAR Component)
struct tagContext Context
NTSYSAPI USHORT NTAPI RtlCaptureStackBackTrace(_In_ ULONG FramesToSkip, _In_ ULONG FramesToCapture, _Out_writes_to_(FramesToCapture, return) PVOID *BackTrace, _Out_opt_ PULONG BackTraceHash)
void __cdecl _disable(void)
BOOLEAN NTAPI KiHandleNmi(VOID)
#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE
KBUGCHECK_CALLBACK_REASON
NTSTATUS NTAPI KeDeregisterNmiCallback(IN PVOID Handle)
#define _SEH2_EXCEPT(...)
UNICODE_STRING KeRosBiosVersion
__analysis_noreturn NTSYSAPI VOID NTAPI DbgBreakPointWithStatus(_In_ ULONG Status)
#define ExFreePoolWithTag(_P, _T)
PVOID NTAPI KeRegisterNmiCallback(IN PNMI_CALLBACK CallbackRoutine, IN PVOID Context)
VOID NTAPI InbvSetScrollRegion(IN ULONG Left, IN ULONG Top, IN ULONG Right, IN ULONG Bottom)
#define KeGetCurrentThread
VOID FASTCALL KeRosDumpStackFrameArray(IN PULONG_PTR Frames, IN ULONG FrameCount)
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
BOOLEAN NTAPI MmIsSpecialPoolAddress(IN PVOID P)
VOID NTAPI KeStallExecutionProcessor(IN ULONG MicroSeconds)
base of all file and directory entries
BOOLEAN NTAPI KeDeregisterBugCheckReasonCallback(IN PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
PULONG MinorVersion OPTIONAL