mirror of
https://github.com/reactos/reactos.git
synced 2025-06-04 08:50:27 +00:00
- Add about two dozen new bugcheck codes and strings.
- Major cleanup of exp.c to move out deprecated and old code. - Use KdDebuggerNotPresent to determine if KDBG is there or not. KdDebuggerEnable is now set whenever booting with debugging -- even if only serial port or screen debugging. - Complete cleanup and major rewrite/improvement of bugcheck code: - Moved stack dump routines to bug.c and cleaned them up. Next step is to remove most of them and implement them properly as part of RtlCaptureStackBackTrace and RtlWalkFrameChain. - Use InbvDisplayString for everything now. BSODs will only truly show on screen. (however, part of the KeBugCheckWithTf improvements, a special "if debugger enabled" BSOD will also be displayed for debugging purposes). - Do checksum calculation in bugcheck callbacks. - Detect and display which drivers belong to which EIP. - Implemented code to select the proper verbose BSOD message depending on the bug check code. - Also implemented code to detect a variety of "known" bug check codes and to recover more data on them, and/or modify them accordingly. Sadly ROS doesn't yet make use of most of these codes. - Factored out and split some code into individual routines. - Look and functionality is now identical to Windows XP. - Stack trace will only be shown if KDBG isn't connected. If KDBG is connected you can do "bt" anyway (which is more powerful). svn path=/trunk/; revision=23794
This commit is contained in:
parent
655e78f3cc
commit
a9bb1c6668
8 changed files with 1268 additions and 727 deletions
|
@ -142,7 +142,6 @@ static ISR_TABLE IsrTable[NR_IRQS][1];
|
|||
#endif
|
||||
|
||||
#define TAG_ISR_LOCK TAG('I', 'S', 'R', 'L')
|
||||
extern IDT_DESCRIPTOR KiIdt[256];
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
|
||||
|
@ -162,8 +161,8 @@ KeInitInterrupts (VOID)
|
|||
*/
|
||||
for (i=0;i<NR_IRQS;i++)
|
||||
{
|
||||
KiIdt[IRQ_BASE+i].a=(irq_handler[i]&0xffff)+(KGDT_R0_CODE<<16);
|
||||
KiIdt[IRQ_BASE+i].b=(irq_handler[i]&0xffff0000)+PRESENT+
|
||||
((IDT_DESCRIPTOR*)&KiIdt[IRQ_BASE+i])->a=(irq_handler[i]&0xffff)+(KGDT_R0_CODE<<16);
|
||||
((IDT_DESCRIPTOR*)&KiIdt[IRQ_BASE+i])->b=(irq_handler[i]&0xffff0000)+PRESENT+
|
||||
I486_INTERRUPT_GATE;
|
||||
#ifdef CONFIG_SMP
|
||||
for (j = 0; j < MAXIMUM_PROCESSORS; j++)
|
||||
|
|
|
@ -75,6 +75,7 @@ extern PVOID Ki386IopmSaveArea;
|
|||
extern ULONG KeI386EFlagsAndMaskV86;
|
||||
extern ULONG KeI386EFlagsOrMaskV86;
|
||||
extern BOOLEAN KeI386VirtualIntExtensions;
|
||||
extern KIDTENTRY KiIdt[];
|
||||
|
||||
/* MACROS *************************************************************************/
|
||||
|
||||
|
@ -145,6 +146,8 @@ extern KSPIN_LOCK DispatcherDatabaseLock;
|
|||
|
||||
#define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
|
||||
|
||||
#define SIZE_OF_FX_REGISTERS 32
|
||||
|
||||
/* INTERNAL KERNEL FUNCTIONS ************************************************/
|
||||
|
||||
/* threadsch.c ********************************************************************/
|
||||
|
@ -677,14 +680,6 @@ KeBugCheckWithTf(
|
|||
PKTRAP_FRAME Tf
|
||||
);
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
KiDumpTrapFrame(
|
||||
PKTRAP_FRAME Tf,
|
||||
ULONG ExceptionNr,
|
||||
ULONG cr2
|
||||
);
|
||||
|
||||
VOID
|
||||
STDCALL
|
||||
KeFlushCurrentTb(VOID);
|
||||
|
@ -757,6 +752,12 @@ KeI386VdmInitialize(
|
|||
VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiFlushNPXState(
|
||||
IN FLOATING_SAVE_AREA *SaveArea
|
||||
);
|
||||
|
||||
#include "ke_x.h"
|
||||
|
||||
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */
|
||||
|
|
|
@ -74,6 +74,7 @@ KdpGetWrapperDebugMode(PCHAR Currentp2,
|
|||
#ifdef KDBG
|
||||
/* Get the KDBG Settings and enable it */
|
||||
KdDebuggerEnabled = TRUE;
|
||||
KdDebuggerNotPresent = FALSE;
|
||||
KdpDebugMode.Gdb = TRUE;
|
||||
KdbpGetCommandLineSettings((PCHAR)LoaderBlock->CommandLine);
|
||||
#endif
|
||||
|
@ -183,6 +184,7 @@ KdInitSystem(ULONG BootPhase,
|
|||
p2 += 10;
|
||||
p2 = KdpGetDebugMode(p2);
|
||||
p2 = KdpGetWrapperDebugMode(p2, LoaderBlock);
|
||||
KdDebuggerEnabled = TRUE;
|
||||
}
|
||||
/* Check for early breakpoint */
|
||||
else if (!_strnicmp(p2, "BREAK", 5))
|
||||
|
|
|
@ -105,8 +105,8 @@ KdpEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
|
|||
BOOLEAN FirstChance,
|
||||
BOOLEAN Gdb)
|
||||
{
|
||||
/* Get out of here if the Debugger isn't enabled */
|
||||
if (!KdDebuggerEnabled) return kdHandleException;
|
||||
/* Get out of here if the Debugger isn't connected */
|
||||
if (KdDebuggerNotPresent) return kdHandleException;
|
||||
|
||||
/* FIXME:
|
||||
* Right now, the GDB wrapper seems to handle exceptions differntly
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,214 +1,40 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Kernel
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: ntoskrnl/ke/i386/exp.c
|
||||
* PURPOSE: Exception Support Code
|
||||
* PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
|
||||
* PURPOSE: Exception Dispatching and Context<->Trap Frame Conversion
|
||||
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
||||
* Gregor Anich
|
||||
* David Welch (welch@cwcom.net)
|
||||
* Skywing (skywing@valhallalegends.com)
|
||||
*/
|
||||
|
||||
/* INCLUDES *****************************************************************/
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <internal/debug.h>
|
||||
#include <debug.h>
|
||||
|
||||
#if defined (ALLOC_PRAGMA)
|
||||
#pragma alloc_text(INIT, KeInitExceptions)
|
||||
#endif
|
||||
|
||||
#define SIZE_OF_FX_REGISTERS 32
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
VOID
|
||||
INIT_FUNCTION
|
||||
NTAPI
|
||||
Ki386AdjustEsp0(
|
||||
IN PKTRAP_FRAME TrapFrame
|
||||
);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiFlushNPXState(
|
||||
IN FLOATING_SAVE_AREA *SaveArea
|
||||
);
|
||||
|
||||
extern KIDTENTRY KiIdt[];
|
||||
|
||||
/* GLOBALS *****************************************************************/
|
||||
|
||||
#define FLAG_IF (1<<9)
|
||||
|
||||
#define _STR(x) #x
|
||||
#define STR(x) _STR(x)
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
# define ARRAY_SIZE(x) (sizeof (x) / sizeof (x[0]))
|
||||
#endif
|
||||
|
||||
extern ULONG init_stack;
|
||||
extern ULONG init_stack_top;
|
||||
|
||||
extern BOOLEAN Ke386NoExecute;
|
||||
|
||||
static char *ExceptionTypeStrings[] =
|
||||
{
|
||||
"Divide Error",
|
||||
"Debug Trap",
|
||||
"NMI",
|
||||
"Breakpoint",
|
||||
"Overflow",
|
||||
"BOUND range exceeded",
|
||||
"Invalid Opcode",
|
||||
"No Math Coprocessor",
|
||||
"Double Fault",
|
||||
"Unknown(9)",
|
||||
"Invalid TSS",
|
||||
"Segment Not Present",
|
||||
"Stack Segment Fault",
|
||||
"General Protection",
|
||||
"Page Fault",
|
||||
"Reserved(15)",
|
||||
"Math Fault",
|
||||
"Alignment Check",
|
||||
"Machine Check",
|
||||
"SIMD Fault"
|
||||
};
|
||||
|
||||
NTSTATUS ExceptionToNtStatus[] =
|
||||
{
|
||||
STATUS_INTEGER_DIVIDE_BY_ZERO,
|
||||
STATUS_SINGLE_STEP,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_BREAKPOINT,
|
||||
STATUS_INTEGER_OVERFLOW,
|
||||
STATUS_ARRAY_BOUNDS_EXCEEDED,
|
||||
STATUS_ILLEGAL_INSTRUCTION,
|
||||
STATUS_FLOAT_INVALID_OPERATION,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_STACK_OVERFLOW,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_ACCESS_VIOLATION, /* RESERVED */
|
||||
STATUS_FLOAT_INVALID_OPERATION, /* Should not be used, the FPU can give more specific info */
|
||||
STATUS_DATATYPE_MISALIGNMENT,
|
||||
STATUS_ACCESS_VIOLATION,
|
||||
STATUS_FLOAT_MULTIPLE_TRAPS,
|
||||
};
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
|
||||
BOOLEAN STDCALL
|
||||
KiRosPrintAddress(PVOID address)
|
||||
KeInitExceptions(VOID)
|
||||
{
|
||||
PLIST_ENTRY current_entry;
|
||||
PLDR_DATA_TABLE_ENTRY current;
|
||||
extern LIST_ENTRY ModuleListHead;
|
||||
ULONG_PTR RelativeAddress;
|
||||
ULONG i = 0;
|
||||
ULONG i;
|
||||
USHORT FlippedSelector;
|
||||
extern KIDTENTRY KiIdt[];
|
||||
|
||||
do
|
||||
{
|
||||
current_entry = ModuleListHead.Flink;
|
||||
/* Loop the IDT */
|
||||
for (i = 0; i <= MAXIMUM_IDTVECTOR; i ++)
|
||||
{
|
||||
/* Save the current Selector */
|
||||
FlippedSelector = KiIdt[i].Selector;
|
||||
|
||||
while (current_entry != &ModuleListHead)
|
||||
{
|
||||
current =
|
||||
CONTAINING_RECORD(current_entry, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
|
||||
|
||||
if (address >= (PVOID)current->DllBase &&
|
||||
address < (PVOID)((ULONG_PTR)current->DllBase + current->SizeOfImage))
|
||||
{
|
||||
RelativeAddress = (ULONG_PTR) address - (ULONG_PTR) current->DllBase;
|
||||
DbgPrint("<%wZ: %x>", ¤t->FullDllName, RelativeAddress);
|
||||
return(TRUE);
|
||||
}
|
||||
current_entry = current_entry->Flink;
|
||||
}
|
||||
|
||||
address = (PVOID)((ULONG_PTR)address & ~(ULONG_PTR)MmSystemRangeStart);
|
||||
} while(++i <= 1);
|
||||
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG Parameter1, ULONG Parameter2)
|
||||
{
|
||||
ULONG cr3_;
|
||||
ULONG StackLimit;
|
||||
ULONG Esp0;
|
||||
ULONG ExceptionNr = (ULONG)Tf->DbgArgMark;
|
||||
ULONG cr2 = (ULONG)Tf->DbgArgPointer;
|
||||
|
||||
Esp0 = (ULONG)Tf;
|
||||
|
||||
/*
|
||||
* Print out the CPU registers
|
||||
*/
|
||||
if (ExceptionNr < ARRAY_SIZE(ExceptionTypeStrings))
|
||||
{
|
||||
DbgPrint("%s Exception: %d(%x)\n", ExceptionTypeStrings[ExceptionNr],
|
||||
ExceptionNr, Tf->ErrCode&0xffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
DbgPrint("Exception: %d(%x)\n", ExceptionNr, Tf->ErrCode&0xffff);
|
||||
}
|
||||
DbgPrint("Processor: %d CS:EIP %x:%x ", KeGetCurrentProcessorNumber(),
|
||||
Tf->SegCs&0xffff, Tf->Eip);
|
||||
KeRosPrintAddress((PVOID)Tf->Eip);
|
||||
DbgPrint("\n");
|
||||
Ke386GetPageTableDirectory(cr3_);
|
||||
DbgPrint("cr2 %x cr3 %x ", cr2, cr3_);
|
||||
DbgPrint("Proc: %x ",PsGetCurrentProcess());
|
||||
if (PsGetCurrentProcess() != NULL)
|
||||
{
|
||||
DbgPrint("Pid: %x <", PsGetCurrentProcess()->UniqueProcessId);
|
||||
DbgPrint("%.16s> ", PsGetCurrentProcess()->ImageFileName);
|
||||
}
|
||||
if (PsGetCurrentThread() != NULL)
|
||||
{
|
||||
DbgPrint("Thrd: %x Tid: %x",
|
||||
PsGetCurrentThread(),
|
||||
PsGetCurrentThread()->Cid.UniqueThread);
|
||||
}
|
||||
DbgPrint("\n");
|
||||
DbgPrint("DS %x ES %x FS %x GS %x\n", Tf->SegDs&0xffff, Tf->SegEs&0xffff,
|
||||
Tf->SegFs&0xffff, Tf->SegGs&0xfff);
|
||||
DbgPrint("EAX: %.8x EBX: %.8x ECX: %.8x\n", Tf->Eax, Tf->Ebx, Tf->Ecx);
|
||||
DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x ESP: %.8x\n", Tf->Edx,
|
||||
Tf->Ebp, Tf->Esi, Esp0);
|
||||
DbgPrint("EDI: %.8x EFLAGS: %.8x ", Tf->Edi, Tf->EFlags);
|
||||
if ((Tf->SegCs&0xffff) == KGDT_R0_CODE)
|
||||
{
|
||||
DbgPrint("kESP %.8x ", Esp0);
|
||||
if (PsGetCurrentThread() != NULL)
|
||||
{
|
||||
DbgPrint("kernel stack base %x\n",
|
||||
PsGetCurrentThread()->Tcb.StackLimit);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (PsGetCurrentThread() != NULL)
|
||||
{
|
||||
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
||||
}
|
||||
else
|
||||
{
|
||||
StackLimit = (ULONG)init_stack_top;
|
||||
}
|
||||
|
||||
/*
|
||||
* Dump the stack frames
|
||||
*/
|
||||
KeDumpStackFrames((PULONG)Tf->Ebp);
|
||||
/* Flip Selector and Extended Offset */
|
||||
KiIdt[i].Selector = KiIdt[i].ExtendedOffset;
|
||||
KiIdt[i].ExtendedOffset = FlippedSelector;
|
||||
}
|
||||
}
|
||||
|
||||
ULONG
|
||||
|
@ -750,177 +576,6 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
|
|||
if (OldIrql < APC_LEVEL) KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KeDumpStackFrames(PULONG Frame)
|
||||
{
|
||||
PULONG StackBase, StackEnd;
|
||||
MEMORY_BASIC_INFORMATION mbi;
|
||||
ULONG ResultLength = sizeof(mbi);
|
||||
NTSTATUS Status;
|
||||
|
||||
DbgPrint("Frames:\n");
|
||||
_SEH_TRY
|
||||
{
|
||||
Status = MiQueryVirtualMemory (
|
||||
(HANDLE)-1,
|
||||
Frame,
|
||||
MemoryBasicInformation,
|
||||
&mbi,
|
||||
sizeof(mbi),
|
||||
&ResultLength );
|
||||
if ( !NT_SUCCESS(Status) )
|
||||
{
|
||||
DPRINT1("Can't dump stack frames: MiQueryVirtualMemory() failed: %x\n", Status );
|
||||
return;
|
||||
}
|
||||
|
||||
StackBase = Frame;
|
||||
StackEnd = (PULONG)((ULONG_PTR)mbi.BaseAddress + mbi.RegionSize);
|
||||
|
||||
while ( Frame >= StackBase && Frame < StackEnd )
|
||||
{
|
||||
ULONG Addr = Frame[1];
|
||||
if (!KeRosPrintAddress((PVOID)Addr))
|
||||
DbgPrint("<%X>", Addr);
|
||||
if ( Addr == 0 || Addr == 0xDEADBEEF )
|
||||
break;
|
||||
StackBase = Frame;
|
||||
Frame = (PULONG)Frame[0];
|
||||
DbgPrint("\n");
|
||||
}
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
}
|
||||
_SEH_END;
|
||||
DbgPrint("\n");
|
||||
}
|
||||
|
||||
VOID STDCALL
|
||||
KeRosDumpStackFrames ( PULONG Frame, ULONG FrameCount )
|
||||
{
|
||||
ULONG i=0;
|
||||
PULONG StackBase, StackEnd;
|
||||
MEMORY_BASIC_INFORMATION mbi;
|
||||
ULONG ResultLength = sizeof(mbi);
|
||||
NTSTATUS Status;
|
||||
|
||||
DbgPrint("Frames: ");
|
||||
_SEH_TRY
|
||||
{
|
||||
if ( !Frame )
|
||||
{
|
||||
#if defined __GNUC__
|
||||
__asm__("mov %%ebp, %0" : "=r" (Frame) : );
|
||||
#elif defined(_MSC_VER)
|
||||
__asm mov [Frame], ebp
|
||||
#endif
|
||||
//Frame = (PULONG)Frame[0]; // step out of KeRosDumpStackFrames
|
||||
}
|
||||
|
||||
Status = MiQueryVirtualMemory (
|
||||
(HANDLE)-1,
|
||||
Frame,
|
||||
MemoryBasicInformation,
|
||||
&mbi,
|
||||
sizeof(mbi),
|
||||
&ResultLength );
|
||||
if ( !NT_SUCCESS(Status) )
|
||||
{
|
||||
DPRINT1("Can't dump stack frames: MiQueryVirtualMemory() failed: %x\n", Status );
|
||||
return;
|
||||
}
|
||||
|
||||
StackBase = Frame;
|
||||
StackEnd = (PULONG)((ULONG_PTR)mbi.BaseAddress + mbi.RegionSize);
|
||||
|
||||
while ( Frame >= StackBase && Frame < StackEnd && i++ < FrameCount )
|
||||
{
|
||||
ULONG Addr = Frame[1];
|
||||
if (!KeRosPrintAddress((PVOID)Addr))
|
||||
DbgPrint("<%X>", Addr);
|
||||
if ( Addr == 0 || Addr == 0xDEADBEEF )
|
||||
break;
|
||||
StackBase = Frame;
|
||||
Frame = (PULONG)Frame[0];
|
||||
DbgPrint(" ");
|
||||
}
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
}
|
||||
_SEH_END;
|
||||
DbgPrint("\n");
|
||||
}
|
||||
|
||||
ULONG STDCALL
|
||||
KeRosGetStackFrames ( PULONG Frames, ULONG FrameCount )
|
||||
{
|
||||
ULONG Count = 0;
|
||||
PULONG StackBase, StackEnd, Frame;
|
||||
MEMORY_BASIC_INFORMATION mbi;
|
||||
ULONG ResultLength = sizeof(mbi);
|
||||
NTSTATUS Status;
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
#if defined __GNUC__
|
||||
__asm__("mov %%ebp, %0" : "=r" (Frame) : );
|
||||
#elif defined(_MSC_VER)
|
||||
__asm mov [Frame], ebp
|
||||
#endif
|
||||
|
||||
Status = MiQueryVirtualMemory (
|
||||
(HANDLE)-1,
|
||||
Frame,
|
||||
MemoryBasicInformation,
|
||||
&mbi,
|
||||
sizeof(mbi),
|
||||
&ResultLength );
|
||||
if ( !NT_SUCCESS(Status) )
|
||||
{
|
||||
DPRINT1("Can't get stack frames: MiQueryVirtualMemory() failed: %x\n", Status );
|
||||
return 0;
|
||||
}
|
||||
|
||||
StackBase = Frame;
|
||||
StackEnd = (PULONG)((ULONG_PTR)mbi.BaseAddress + mbi.RegionSize);
|
||||
|
||||
while ( Count < FrameCount && Frame >= StackBase && Frame < StackEnd )
|
||||
{
|
||||
Frames[Count++] = Frame[1];
|
||||
StackBase = Frame;
|
||||
Frame = (PULONG)Frame[0];
|
||||
}
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
}
|
||||
_SEH_END;
|
||||
return Count;
|
||||
}
|
||||
|
||||
VOID
|
||||
INIT_FUNCTION
|
||||
NTAPI
|
||||
KeInitExceptions(VOID)
|
||||
{
|
||||
ULONG i;
|
||||
USHORT FlippedSelector;
|
||||
|
||||
/* Loop the IDT */
|
||||
for (i = 0; i <= MAXIMUM_IDTVECTOR; i ++)
|
||||
{
|
||||
/* Save the current Selector */
|
||||
FlippedSelector = KiIdt[i].Selector;
|
||||
|
||||
/* Flip Selector and Extended Offset */
|
||||
KiIdt[i].Selector = KiIdt[i].ExtendedOffset;
|
||||
KiIdt[i].ExtendedOffset = FlippedSelector;
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
|
||||
|
@ -1091,10 +746,10 @@ NTSTATUS
|
|||
NTAPI
|
||||
KeRaiseUserException(IN NTSTATUS ExceptionCode)
|
||||
{
|
||||
ULONG OldEip;
|
||||
PKTHREAD Thread = KeGetCurrentThread();
|
||||
ULONG OldEip;
|
||||
PKTHREAD Thread = KeGetCurrentThread();
|
||||
|
||||
/* Make sure we can access the TEB */
|
||||
/* Make sure we can access the TEB */
|
||||
_SEH_TRY
|
||||
{
|
||||
Thread->Teb->ExceptionCode = ExceptionCode;
|
||||
|
|
|
@ -86,7 +86,8 @@ Ke386CallBios(IN ULONG Int,
|
|||
KeSetSystemAffinityThread(1);
|
||||
|
||||
/* Make sure there's space for two IOPMs, then copy & clear the current */
|
||||
//ASSERT(((PKGDTENTRY)&KeGetPcr()->GDT[KGDT_TSS / 8])->LimitLow >= (0x2000 + IOPM_OFFSET - 1));
|
||||
//ASSERT(((PKGDTENTRY)&KeGetPcr()->GDT[KGDT_TSS / 8])->LimitLow >=
|
||||
// (0x2000 + IOPM_OFFSET - 1));
|
||||
RtlMoveMemory(Ki386IopmSaveArea, &Tss->IoMaps[0].IoMap, PAGE_SIZE * 2);
|
||||
RtlZeroMemory(&Tss->IoMaps[0].IoMap, PAGE_SIZE * 2);
|
||||
|
||||
|
|
|
@ -21,6 +21,58 @@ LanguageNames=(English=0x409:MSG00409)
|
|||
;
|
||||
; message definitions
|
||||
;
|
||||
MessageId=0x7F
|
||||
Severity=Warning
|
||||
Facility=System
|
||||
SymbolicName=BUGCHECK_MESSAGE_INTRO
|
||||
Language=English
|
||||
A problem has been detected and ReactOS has been shut down to prevent damage
|
||||
to your computer.
|
||||
.
|
||||
|
||||
MessageId=0x80
|
||||
Severity=Warning
|
||||
Facility=System
|
||||
SymbolicName=BUGCODE_ID_DRIVER
|
||||
Language=English
|
||||
The problem seems to be caused by the following file:
|
||||
|
||||
.
|
||||
|
||||
MessageId=0x81
|
||||
Severity=Warning
|
||||
Facility=System
|
||||
SymbolicName=PSS_MESSAGE_INTRO
|
||||
Language=English
|
||||
If this is the first time you've seen this Stop error screen,
|
||||
restart your computer. If this screen appears again, follow
|
||||
these steps:
|
||||
|
||||
.
|
||||
|
||||
MessageId=0x82
|
||||
Severity=Warning
|
||||
Facility=System
|
||||
SymbolicName=BUGCODE_PSS_MESSAGE
|
||||
Language=English
|
||||
Check to make sure any new hardware or software is properly installed.
|
||||
If this is a new installation, ask your hardware or software manufacturer
|
||||
for any ReactOS updates you might need.
|
||||
|
||||
If problems continue, disable or remove any newly installed hardware
|
||||
or software. Disable BIOS memory options such as caching or shadowing.
|
||||
If you need to use Safe Mode to remove or disable components, restart
|
||||
your computer, press F8 to select Advanced Startup Options, and then
|
||||
select Safe Mode.
|
||||
.
|
||||
|
||||
MessageId=0x83
|
||||
Severity=Warning
|
||||
Facility=System
|
||||
SymbolicName=BUGCHECK_TECH_INFO
|
||||
Language=English
|
||||
Technical information:
|
||||
.
|
||||
|
||||
MessageId=0x0
|
||||
Severity=Success
|
||||
|
@ -267,7 +319,16 @@ Severity=Success
|
|||
Facility=System
|
||||
SymbolicName=KMODE_EXCEPTION_NOT_HANDLED
|
||||
Language=English
|
||||
KMODE_EXCEPTION_NOT_HANDLED
|
||||
Check to be sure you have adequate disk space. If a driver is
|
||||
identified in the Stop message, disable the driver or check
|
||||
with the manufacturer for driver updates. Try changing video
|
||||
adapters.
|
||||
|
||||
Check with your hardware vendor for any BIOS updates. Disable
|
||||
BIOS memory options such as caching or shadowing. If you need
|
||||
to use Safe Mode to remove or disable components, restart your
|
||||
computer, press F8 to select Advanced Startup Options, and then
|
||||
select Safe Mode.
|
||||
.
|
||||
|
||||
MessageId=0x1F
|
||||
|
@ -307,7 +368,10 @@ Severity=Success
|
|||
Facility=System
|
||||
SymbolicName=FAT_FILE_SYSTEM
|
||||
Language=English
|
||||
FAT_FILE_SYSTEM
|
||||
Disable or uninstall any anti-virus, disk defragmentation
|
||||
or backup utilities. Check your hard drive configuration,
|
||||
and check for any updated drivers. Run CHKDSK /F to check
|
||||
for hard drive corruption, and then restart your computer.
|
||||
.
|
||||
|
||||
MessageId=0x24
|
||||
|
@ -395,7 +459,15 @@ Severity=Success
|
|||
Facility=System
|
||||
SymbolicName=DATA_BUS_ERROR
|
||||
Language=English
|
||||
DATA_BUS_ERROR
|
||||
Run system diagnostics supplied by your hardware manufacturer.
|
||||
In particular, run a memory check, and check for faulty or
|
||||
mismatched memory. Try changing video adapters.
|
||||
|
||||
Check with your hardware vendor for any BIOS updates. Disable
|
||||
BIOS memory options such as caching or shadowing. If you need
|
||||
to use Safe Mode to remove or disable components, restart your
|
||||
computer, press F8 to select Advanced Startup Options, and then
|
||||
select Safe Mode.
|
||||
.
|
||||
|
||||
MessageId=0x2F
|
||||
|
@ -502,7 +574,12 @@ Severity=Success
|
|||
Facility=System
|
||||
SymbolicName=NO_MORE_SYSTEM_PTES
|
||||
Language=English
|
||||
NO_MORE_SYSTEM_PTES
|
||||
Remove any recently installed software including backup
|
||||
utilities or disk-intensive applications.
|
||||
|
||||
If you need to use Safe Mode to remove or disable components,
|
||||
restart your computer, press F8 to select Advanced Startup
|
||||
Options, and then select Safe Mode.
|
||||
.
|
||||
|
||||
MessageId=0x40
|
||||
|
@ -581,7 +658,13 @@ Language=English
|
|||
STREAMS_INTERNAL_ERROR
|
||||
.
|
||||
|
||||
|
||||
MessageId=0x4C
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=FATAL_UNHANDLED_HARD_ERROR
|
||||
Language=English
|
||||
FATAL_UNHANDLED_HARD_ERROR
|
||||
.
|
||||
|
||||
MessageId=0x4D
|
||||
Severity=Success
|
||||
|
@ -942,7 +1025,11 @@ Severity=Success
|
|||
Facility=System
|
||||
SymbolicName=INACCESSIBLE_BOOT_DEVICE
|
||||
Language=English
|
||||
INACCESSIBLE_BOOT_DEVICE
|
||||
Check for viruses on your computer. Remove any newly installed
|
||||
hard drives or hard drive controllers. Check your hard drive
|
||||
to make sure it is properly configured and terminated.
|
||||
Run CHKDSK /F to check for hard drive corruption, and then
|
||||
restart your computer.
|
||||
.
|
||||
|
||||
|
||||
|
@ -960,7 +1047,14 @@ Severity=Success
|
|||
Facility=System
|
||||
SymbolicName=UNEXPECTED_KERNEL_MODE_TRAP
|
||||
Language=English
|
||||
UNEXPECTED_KERNEL_MODE_TRAP
|
||||
Run a system diagnostic utility supplied by your hardware manufacturer.
|
||||
In particular, run a memory check, and check for faulty or mismatched
|
||||
memory. Try changing video adapters.
|
||||
|
||||
Disable or remove any newly installed hardware and drivers. Disable or
|
||||
remove any newly installed software. If you need to use Safe Mode to
|
||||
remove or disable components, restart your computer, press F8 to select
|
||||
Advanced Startup Options, and then select Safe Mode.
|
||||
.
|
||||
|
||||
MessageId=0x7F
|
||||
|
@ -974,6 +1068,14 @@ Hardware malfunction
|
|||
MessageId=0x80
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=KERNEL_MODE_EXCEPTION_NOT_HANDLED
|
||||
Language=English
|
||||
KERNEL_MODE_EXCEPTION_NOT_HANDLED
|
||||
.
|
||||
|
||||
MessageId=0x8E
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=SPIN_LOCK_INIT_FAILURE
|
||||
Language=English
|
||||
SPIN_LOCK_INIT_FAILURE
|
||||
|
@ -995,6 +1097,22 @@ Language=English
|
|||
INVALID_WORK_QUEUE_ITEM
|
||||
.
|
||||
|
||||
MessageId=0xA5
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=ACPI_BIOS_ERROR
|
||||
Language=English
|
||||
The BIOS in this system is not fully ACPI compliant. Please contact your
|
||||
system vendor for an updated BIOS.
|
||||
.
|
||||
|
||||
MessageId=0xBE
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=ATTEMPTED_WRITE_TO_READONLY_MEMORY
|
||||
Language=English
|
||||
ATTEMPTED_WRITE_TO_READONLY_MEMORY
|
||||
|
||||
MessageId=0xC2
|
||||
Severity=Success
|
||||
Facility=System
|
||||
|
@ -1003,6 +1121,110 @@ Language=English
|
|||
BAD_POOL_CALLER
|
||||
.
|
||||
|
||||
MessageId=0xC3
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=BUGCODE_PSS_MESSAGE_SIGNATURE
|
||||
Language=English
|
||||
A system file that is owned by ReactOS was replaced by an application
|
||||
running on your system. The operating system detected this and tried to
|
||||
verify the validity of the file's signature. The operating system found that
|
||||
the file signature is not valid and put the original, correct file back
|
||||
so that your operating system will continue to function properly.
|
||||
.
|
||||
|
||||
MessageId=0xC5
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_CORRUPTED_EXPOOL
|
||||
Language=English
|
||||
A device driver has pool.
|
||||
|
||||
Check to make sure any new hardware or software is properly installed.
|
||||
If this is a new installation, ask your hardware or software manufacturer
|
||||
for any ReactOS updates you might need.
|
||||
|
||||
Run the driver verifier against any new (or suspect) drivers.
|
||||
If that doesn't reveal the corrupting driver, try enabling special pool.
|
||||
Both of these features are intended to catch the corruption at an earlier
|
||||
point where the offending driver can be identified.
|
||||
|
||||
If you need to use Safe Mode to remove or disable components,
|
||||
restart your computer, press F8 to select Advanced Startup Options,
|
||||
and then select Safe Mode.
|
||||
.
|
||||
|
||||
MessageId=0xCB
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS
|
||||
Language=English
|
||||
DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS
|
||||
.
|
||||
|
||||
MessageId=0xCE
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
|
||||
Language=English
|
||||
DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
|
||||
.
|
||||
|
||||
MessageId=0xD0
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_CORRUPTED_MMPOOL
|
||||
Language=English
|
||||
DRIVER_CORRUPTED_MMPOOL
|
||||
.
|
||||
|
||||
MessageId=0xD1
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_IRQL_NOT_LESS_OR_EQUAL
|
||||
Language=English
|
||||
DRIVER_IRQL_NOT_LESS_OR_EQUAL
|
||||
.
|
||||
|
||||
MessageId=0xD3
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_PORTION_MUST_BE_NONPAGED
|
||||
Language=English
|
||||
DRIVER_PORTION_MUST_BE_NONPAGED
|
||||
.
|
||||
|
||||
MessageId=0xD8
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=DRIVER_USED_EXCESSIVE_PTES
|
||||
Language=English
|
||||
DRIVER_USED_EXCESSIVE_PTES
|
||||
.
|
||||
|
||||
MessageId=0xD4
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=SYSTEM_SCAN_AT_RAISED_IRQL_CAUGHT_IMPROPER_DRIVER_UNLOAD
|
||||
Language=English
|
||||
SYSTEM_SCAN_AT_RAISED_IRQL_CAUGHT_IMPROPER_DRIVER_UNLOAD
|
||||
.
|
||||
|
||||
MessageId=0xE0
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=ACPI_BIOS_FATAL_ERROR
|
||||
Language=English
|
||||
|
||||
Your computer (BIOS) has reported that a component in your system is faulty and
|
||||
has prevented ReactOS from operating. You can determine which component is
|
||||
faulty by running the diagnostic disk or tool that came with your computer.
|
||||
|
||||
If you do not have this tool, you must contact your system vendor and report
|
||||
this error message to them. They will be able to assist you in correcting this
|
||||
hardware problem thereby allowing ReactOS to operate.
|
||||
.
|
||||
|
||||
MessageId=0xE1
|
||||
Severity=Success
|
||||
Facility=System
|
||||
|
@ -1035,6 +1257,14 @@ Language=English
|
|||
WORKER_INVALID
|
||||
.
|
||||
|
||||
MessageId=0xE5
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=POWER_FAILURE_SIMULATE
|
||||
Language=English
|
||||
POWER_FAILURE_SIMULATE
|
||||
.
|
||||
|
||||
MessageId=0xFA
|
||||
Severity=Success
|
||||
Facility=System
|
||||
|
@ -1101,6 +1331,19 @@ Language=English
|
|||
ACTIVE_EX_WORKER_THREAD_TERMINATION
|
||||
.
|
||||
|
||||
MessageId=0xEA
|
||||
Severity=Success
|
||||
Facility=System
|
||||
SymbolicName=THREAD_STUCK_IN_DEVICE_DRIVER
|
||||
Language=English
|
||||
|
||||
The device driver got stuck in an infinite loop. This usually indicates
|
||||
problem with the device itself or with the device driver programming the
|
||||
hardware incorrectly.
|
||||
|
||||
Please check with your hardware device vendor for any driver updates.
|
||||
.
|
||||
|
||||
MessageId=0xEF
|
||||
Severity=Success
|
||||
Facility=System
|
||||
|
|
Loading…
Reference in a new issue