EXTERN KiDeliverApc:PROC
EXTERN KiDpcInterruptHandler:PROC
+#ifdef _WINKD_
+EXTERN KdSetOwedBreakpoints:PROC
+#endif
+
+
/* GLOBALS *******************************************************************/
.data
add rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH
ret
-ENDFUNC InternalDispatchException
+ENDFUNC
/* CPU EXCEPTION HANDLERS ****************************************************/
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiDivideErrorFault
+ENDFUNC
PUBLIC KiDebugTrapOrFault
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiDebugTrapOrFault
+ENDFUNC
PUBLIC KiNmiInterrupt
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiNmiInterrupt
+ENDFUNC
PUBLIC KiBreakpointTrap
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiBreakpointTrap
+ENDFUNC
PUBLIC KiOverflowTrap
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiOverflowTrap
+ENDFUNC
PUBLIC KiBoundFault
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiBoundFault
+ENDFUNC
PUBLIC KiInvalidOpcodeFault
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiInvalidOpcodeFault
+ENDFUNC
PUBLIC KiNpxNotAvailableFault
KiNpxNotAvailableFaultExit:
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiNpxNotAvailableFault
+ENDFUNC
PUBLIC KiDoubleFaultAbort
/* Bugcheck */
Fatal 8 // EXCEPTION_DOUBLE_FAULT
jmp $
-ENDFUNC KiDoubleFaultAbort
+ENDFUNC
PUBLIC KiNpxSegmentOverrunAbort
Fatal EXCEPTION_NPX_OVERRUN
jmp $
-ENDFUNC KiNpxSegmentOverrunAbort
+ENDFUNC
PUBLIC KiInvalidTssFault
/* Bugcheck */
Fatal EXCEPTION_INVALID_TSS
jmp $
-ENDFUNC KiInvalidTssFault
+ENDFUNC
PUBLIC KiSegmentNotPresentFault
/* Bugcheck */
Fatal EXCEPTION_SEGMENT_NOT_PRESENT
jmp $
-ENDFUNC KiSegmentNotPresentFault
+ENDFUNC
PUBLIC KiStackFault
/* Bugcheck */
Fatal EXCEPTION_STACK_FAULT
jmp $
-ENDFUNC KiStackFault
+ENDFUNC
PUBLIC KiGeneralProtectionFault
/* Return */
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiGeneralProtectionFault
+ENDFUNC
PUBLIC KiPageFault
/* Check for success */
test eax, eax
+#ifndef _WINKD_
jge PageFaultReturn
+#else
+ jl PageFaultError
+
+ /* Check whether the kernel debugger has owed breakpoints to be inserted */
+ call KdSetOwedBreakpoints
+ /* We succeeded, return */
+ jmp PageFaultReturn
+
+PageFaultError:
+#endif
/* Disable interrupts again for the debugger */
cli
je SpecialCode
InPageException:
-
/* Dispatch in-page exception */
mov r11d, eax // Param3 = Status
mov eax, STATUS_IN_PAGE_ERROR // ExceptionCode
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiFloatingErrorFault
+ENDFUNC
PUBLIC KiAlignmentFault
/* Bugcheck */
Fatal EXCEPTION_ALIGNMENT_CHECK
jmp $
-ENDFUNC KiAlignmentFault
+ENDFUNC
PUBLIC KiMcheckAbort
/* Bugcheck */
Fatal HEX(12)
jmp $
-ENDFUNC KiMcheckAbort
+ENDFUNC
PUBLIC KiXmmException
KiXmmExit:
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiXmmException
+ENDFUNC
/* SOFTWARE INTERRUPT SERVICES ***********************************************/
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiRaiseAssertion
+ENDFUNC
PUBLIC KiDebugServiceTrap
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiDebugServiceTrap
+ENDFUNC
PUBLIC KiApcInterrupt
#endif
/* Return */
ExitTrap TF_SAVE_ALL
-ENDFUNC KiUnexpectedInterrupt
+ENDFUNC
PUBLIC KiInterruptDispatch
FUNC KiInterruptDispatch