KeCopyLastBranchInformation

UINT64 __stdcall KeCopyLastBranchInformation(INT64 a1, INT64 a2){
  UINT64 result; 
  _QWORD *v4; 
  __int64 v5; 

  if( (*(_BYTE *)(a2 + 368) & 1) != 0 )
  {
    result = *(unsigned int *)(a2 + 256);
    if( (result & 0x100) == 0 )
    {
LABEL_3:
      *(_OWORD *)(a1 + 1200) = 0i64;
      *(_OWORD *)(a1 + 1216) = 0i64;
      return result;
    }
  }
  else
  {
    result = (UINT64)KeGetCurrentPrcb();
    if( (*(_DWORD *)(result + 328) & 0x100i64) == 0 )
      goto LABEL_3;
  }
  v4 = (_QWORD *)(a1 + 1200);
  *(_OWORD *)(a1 + 1200) = *(_OWORD *)(a2 + 272);
  *(_OWORD *)(a1 + 1216) = *(_OWORD *)(a2 + 288);
  if( (*(_BYTE *)(a2 + 368) & 1) != 0 )
  {
    v5 = 4i64;
    do
    {
      result = *v4 & 0x7FFFFFFFFFFFFFFFi64;
      if( result > 0x7FFFFFFEFFFFi64 )
        *v4 = 0i64;
      ++v4;
      --v5;
    }
    while( v5 );
  }
  return result;
}

Referenced by:

KeContextFromKframes
KiCaptureUmsThreadContext
PspGetContext