HalpBlkMachineCheckAbort
VOID __stdcall HalpBlkMachineCheckAbort(UINT64 a1, UINT64 a2, UINT64 a3, UINT64 a4){
unsigned __int64 v4;
unsigned __int64 v5;
unsigned __int64 v6;
_M128A v7;
_M128A v8;
_M128A v9;
_M128A v10;
_M128A v11;
_M128A v12;
_KTRAP_FRAME *__shifted(_KTRAP_FRAME,0x80) TrapFrame;
unsigned __int64 Rsp;
unsigned __int64 v15;
_BYTE *Rip;
_BYTE *v18;
void *v20;
__int16 v21;
unsigned __int64 retaddr;
void *v23;
__int16 v24;
TrapFrame = KeGetTrapFrame();
ADJ(TrapFrame)->ExceptionActive = 1;
ADJ(TrapFrame)->_Rax = v4;
ADJ(TrapFrame)->_Rcx = a1;
ADJ(TrapFrame)->_Rdx = a2;
ADJ(TrapFrame)->_R8 = a3;
ADJ(TrapFrame)->_R9 = a4;
ADJ(TrapFrame)->_R10 = v5;
ADJ(TrapFrame)->_R11 = v6;
ADJ(TrapFrame)->_MxCsr = _mm_getcsr();
_mm_setcsr(0x1F80u);
ADJ(TrapFrame)->_Xmm0 = v7;
ADJ(TrapFrame)->_Xmm1 = v8;
ADJ(TrapFrame)->_Xmm2 = v9;
ADJ(TrapFrame)->_Xmm3 = v10;
ADJ(TrapFrame)->_Xmm4 = v11;
ADJ(TrapFrame)->_Xmm5 = v12;
HalpBlkMceFastForward((UINT64)ADJ(TrapFrame), 0);
Rsp = ADJ(TrapFrame)->_Rsp;
v15 = *(_QWORD *)(KeGetPcr()->Unused[0] + 52);
if( Rsp <= v15 && Rsp > v15 - 0x2000 )
{
ADJ(TrapFrame)->SegSs |= 4u;
_InterlockedIncrement(MK_FP(__GS__, 2452i64));
}
Rip = (_BYTE *)ADJ(TrapFrame)->_Rip;
if( *Rip == 0xF4 )
{
v18 = Rip - 1;
if( *v18 == 0xFB )
{
ADJ(TrapFrame)->EFlags &= ~0x200u;
ADJ(TrapFrame)->_Rip = (unsigned __int64)v18;
_InterlockedIncrement(MK_FP(__GS__, 2456i64));
}
}
HalpBlkHandleMachineCheckAbort((UINT64)ADJ(TrapFrame));
_mm_setcsr(ADJ(TrapFrame)->_MxCsr);
if( (v24 & 4) == 0 )
{
__writemsr(0x17Au, 0i64);
__iretq(v20, v21, retaddr, v23, v24);
}
__writeeflags(retaddr);
__writemsr(0x17Au, 0i64);
__asm { retfq }
}Referenced by:
No references.