Doxygen

DECLSPEC_NORETURN VOID FASTCALL KiServiceExit ( IN PKTRAP_FRAME  TrapFrame,
IN NTSTATUS  Status 
)

Definition at line 139 of file traphdlr.c.

Referenced by KiSystemCall(), KiUserModeCallout(), NtContinue(), and NtRaiseException().

{
    ASSERT((TrapFrame->EFlags & EFLAGS_V86_MASK) == 0);
    ASSERT(!KiIsFrameEdited(TrapFrame));
    
    /* Copy the status into EAX */
    TrapFrame->Eax = Status;
    
    /* Common trap exit code */
    KiCommonExit(TrapFrame, FALSE);
    
    /* Restore previous mode */
    KeGetCurrentThread()->PreviousMode = (CCHAR)TrapFrame->PreviousPreviousMode;

    /* Check for user mode exit */
    if (TrapFrame->SegCs & MODE_MASK)
    {
        /* Check if we were single stepping */
        if (TrapFrame->EFlags & EFLAGS_TF)
        {
            /* Must use the IRET handler */
            KiSystemCallTrapReturn(TrapFrame);
        }
        else
        {
            /* We can use the sysexit handler */
            KiFastCallExitHandler(TrapFrame);
        }
    }

    /* Exit to kernel mode */
    KiSystemCallReturn(TrapFrame);
}