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