KiKernelExit

VOID __stdcall KiKernelExit(INT64 a1, INT64 a2, INT64 a3, INT64 a4, CHAR a5){
  char v5; 
  bool v6; 
  _QWORD v7[5]; 
  void *retaddr; 
  __int64 v9; 
  __int64 v10; 
  void *v11; 
  __int64 v12; 

  v7[4] = v12;
  v7[3] = v11;
  v7[2] = v10;
  v7[1] = v9;
  v7[0] = retaddr;
  __writegsqword(0x9010u, (unsigned __int64)v7);
  if( (KeGetPcr()->Prcb.ShadowFlags & 2) == 0 )
  {
    v6 = (v5 & 1) != 0;
    if( v6 && (KeGetPcr()->Prcb.ShadowFlags & 1) != 0 )
      __writegsdword(0x9018u, KeGetPcr()->Prcb.ShadowFlags & 0xFFFFFFFE);
    __writecr3((unsigned __int64)&retaddr);
  }
  if( (KeGetPcr()->Prcb.ShadowFlags & 2) == 0 )
    __asm { verw    [rsp+arg_18] }
  __swapgs();
  __iretq(retaddr, v9, v10, v11, v12);
}

Referenced by:

KiApcInterrupt
KiBoundFault
KiControlProtectionFault
KiDpcInterrupt
KiExceptionDispatch
KiFastFailDispatch
KiInvalidOpcodeFault
KiIpiInterrupt
KiPageFault
KiRestoreSetContextState
KiSpuriousDispatchNoEOI
KiSwInterrupt
KiSystemCall64
KiVirtualizationException
KxIsrLinkage
KxMcheckAlternateReturn
KxStartUserThread
NtCallEnclave
NtContinueEx
NtRaiseException