WheapAddRecoveryPacketToErrorRecord

INT64 __fastcall WheapAddRecoveryPacketToErrorRecord(
        struct EX_RUNDOWN_REF **a1,
        INT64 *a2,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6){
  __int64 v6; 
  int v7; 
  unsigned int v8; 
  unsigned int v11; 
  INT64 *v12; 
  __int64 v13; 
  __int128 v14; 
  __int128 v15; 
  __int128 v16; 
  __int128 v17; 
  INT64 result[2]; 
  __int128 v20; 
  __int128 v21; 
  __int128 v22; 
  __int128 v23; 
  v6 = *((unsigned __int16 *)a2 + 5);
  v7 = a3;
  v8 = *((_DWORD *)a1 + 6);
  if( (unsigned int)v6 >= v8 )
    return(unsigned int)-1073741789;
  memset((INT64)result, 0i64);
  v12 = a2 + 16;
  v11 = 0;
  DWORD2(v20) = *((_DWORD *)a1 + 7);
  HIDWORD(v20) = *((_DWORD *)a1 + 2);
  result[0] = 0x341454857i64;
  LODWORD(result[1]) = 80;
  *(_QWORD *)&v22 = a2;
  if( (_WORD)v6 )
  {
    v12 += 9 * v6;
    v13 = (unsigned int)(*((_DWORD *)v12 - 18) + *((_DWORD *)v12 - 17));
  }
  else
  {
    v13 = 72 * v8 + 128;
  }
  if( (unsigned int)(v7 - v13) < 0x50 )
  {
    return(unsigned int)-1073741789;
  }
  else
  {
    v14 = v20;
    *((_WORD *)v12 + 4) = 768;
    *(_DWORD *)v12 = v13;
    *((_DWORD *)v12 + 1) = 80;
    *((_DWORD *)v12 + 12) = 0;
    *((GUID *)v12 + 1) = WHEA_ERROR_PACKET_SECTION_GUID;
    *(_OWORD *)((char *)a2 + v13) = *(_OWORD *)result;
    v15 = v21;
    *(_OWORD *)((char *)a2 + v13 + 16) = v14;
    v16 = v22;
    *(_OWORD *)((char *)a2 + v13 + 32) = v15;
    v17 = v23;
    *(_OWORD *)((char *)a2 + v13 + 48) = v16;
    *(_OWORD *)((char *)a2 + v13 + 64) = v17;
    ++*((_WORD *)a2 + 5);
  }
  return v11;
}

Referenced by:

WheapCreateRecordFromGenericErrorData