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.