VOID FORCEINLINE KiCommonExit(IN PKTRAP_FRAME TrapFrame, const ULONG Flags) { /* Disable interrupts until we return */ _disable(); /* Check for APC delivery */ KiCheckForApcDelivery(TrapFrame); /* Debugging checks */ KiExitTrapDebugChecks(TrapFrame, Flags); /* Restore the SEH handler chain */ KeGetPcr()->NtTib.ExceptionList = TrapFrame->ExceptionList; /* Check if there are active debug registers */ if (__builtin_expect(TrapFrame->Dr7 & ~DR7_RESERVED_MASK, 0)) { /* Not handled yet */ DbgPrint("Need Hardware Breakpoint Support!\n"); DbgBreakPoint(); while (TRUE); } }
VOID FORCEINLINE KiCommonExit(IN PKTRAP_FRAME TrapFrame, BOOLEAN SkipPreviousMode) { /* Disable interrupts until we return */ _disable(); /* Check for APC delivery */ KiCheckForApcDelivery(TrapFrame); /* Restore the SEH handler chain */ KeGetPcr()->NtTib.ExceptionList = TrapFrame->ExceptionList; /* Check if there are active debug registers */ if (__builtin_expect(TrapFrame->Dr7 & ~DR7_RESERVED_MASK, 0)) { /* Check if the frame was from user mode or v86 mode */ if ((TrapFrame->SegCs & MODE_MASK) || (TrapFrame->EFlags & EFLAGS_V86_MASK)) { /* Handle debug registers */ KiHandleDebugRegistersOnTrapExit(TrapFrame); } } /* Debugging checks */ KiExitTrapDebugChecks(TrapFrame, SkipPreviousMode); }