HalpAddErrorEntryToPacket

NTSTATUS __stdcall HalpAddErrorEntryToPacket(INT64 a1, INT64 a2, _OWORD *a3){
  NTSTATUS v5; 
  __int64 v6; 
  unsigned int v7; 
  char v8; 
  __int64 v9; 

  if( !a1 )
    return -1073741811;
  v5 = -1073741637;
  if( (*(_DWORD *)a1 & 0x3FF0) != 0 )
  {
    v6 = *(_WORD *)(a1 + 40) < 0x300u ? 64 : 72;
    v7 = v6 + *(_DWORD *)(a1 + 44);
    if( v7 < (unsigned int)v6 )
    {
      return -1073741811;
    }
    else
    {
      v8 = *(_BYTE *)(a1 + 42);
      *(_BYTE *)(a2 + 10) = v8;
      if( (v8 & 1) != 0 )
        *(_OWORD *)(a2 + 32) = *(_OWORD *)(a1 + 48);
      if( (v8 & 2) != 0 )
      {
        *(_OWORD *)(a2 + 52) = *(_OWORD *)(a1 + 64);
        *(_DWORD *)(a2 + 68) = *(_DWORD *)(a1 + 80);
      }
      v9 = *(_QWORD *)(a1 + 20) - *(_QWORD *)&MEMORY_ERROR_SECTION_GUID.Data1;
      if( !v9 )
        v9 = *(_QWORD *)(a1 + 28) - *(_QWORD *)MEMORY_ERROR_SECTION_GUID.Data4;
      if( !v9 )
      {
        *a3 = *(_OWORD *)(v6 + a1 + 20);
        a3[1] = *(_OWORD *)(v6 + a1 + 36);
        a3[2] = *(_OWORD *)(v6 + a1 + 52);
        a3[3] = *(_OWORD *)(v6 + a1 + 68);
        a3[4] = *(_OWORD *)(v6 + a1 + 84);
      }
      return v7 >= 0xFFFFFFEC ? 0xC000000D : 0;
    }
  }
  return v5;
}

Referenced by:

HalpAddMcaExtendedLogToMemoryErrorSection