HalpAcpiGetTableFromBios

UINT64 __stdcall HalpAcpiGetTableFromBios(
        _LOADER_PARAMETER_BLOCK *LoaderBlock,
        UINT8 *OemId,
        UINT8 *OemTableId,
        _LARGE_INTEGER *TablePhysicalAddress,
        _LARGE_INTEGER *TablePhysicalAddressa){
  UINT64 v5; 
  UINT64 v6; 
  _LARGE_INTEGER v7; 
  unsigned int v10; 
  UINT64 result; 
  UINT64 v13; 
  __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  unsigned int v17; 
  unsigned int *v18; 
  _LARGE_INTEGER *v19; 
  _LARGE_INTEGER *TableWork; 
  __int64 v21; 
  INT64 PerformChecksum; 
  UINT64 Size; 
  UINT8 *Str1; 
  UINT8 *OemTableIda; 
  _LARGE_INTEGER *v27; 

  OemTableIda = (UINT8 *)TablePhysicalAddress;
  Str1 = OemTableId;
  LODWORD(Size) = 0;
  v5 = 0i64;
  v6 = 0i64;
  v7.QuadPart = 0i64;
  v10 = (unsigned int)OemId;
  if( (_DWORD)OemId == 1413763922 || (_DWORD)OemId == 1413763928 )
    return v6;
  if( (_DWORD)OemId == 1413763908 )
  {
    TableWork = HalpAcpiGetTableWork(LoaderBlock, (const UINT8 *)0x50434146, 0i64);
    if( !TableWork )
      return v6;
    if( LOBYTE(TableWork[1].anonymous_0.LowPart) < 3u
      || (v7 = *(_LARGE_INTEGER *)((char *)TableWork + 140), !v7.QuadPart) )
    {
      v7.QuadPart = TableWork[5].anonymous_0.LowPart;
    }
    LOBYTE(PerformChecksum) = 1;
    v6 = HalpAcpiCheckAndMapTable(
           LoaderBlock,
           v7,
           (UINT8 *)0x24,
           (UINT8 *)0x54445344,
           OemTableId,
           (UINT8 *)TablePhysicalAddress,
           PerformChecksum,
           &Size);
LABEL_15:
    TablePhysicalAddressa->anonymous_0.LowPart = Size;
    if( v6 )
      *v27 = v7;
    return v6;
  }
  result = (UINT64)HalpAcpiGetRsdt(LoaderBlock);
  v13 = result;
  if( result )
  {
    v14 = *(unsigned int *)(result + 4);
    if( *(_DWORD *)result == 1413763922 )
    {
      v13 = 0i64;
      v5 = result;
      v21 = 36i64;
      if( (unsigned int)v14 < 0x24 )
        v21 = v14;
      v16 = (unsigned __int64)(v14 - v21) >> 2;
    }
    else
    {
      v15 = 36i64;
      if( (unsigned int)v14 < 0x24 )
        v15 = (unsigned int)v14;
      v16 = (unsigned __int64)(v14 - v15) >> 3;
    }
    v17 = 0;
    if( (_DWORD)v16 )
    {
      v18 = (unsigned int *)(v5 + 36);
      v19 = (_LARGE_INTEGER *)(v13 + 36);
      do
      {
        if( v13 )
          v7 = *v19;
        else
          v7.QuadPart = *v18;
        LOBYTE(PerformChecksum) = 1;
        v6 = HalpAcpiCheckAndMapTable(
               LoaderBlock,
               v7,
               (UINT8 *)0x24,
               (UINT8 *)v10,
               Str1,
               OemTableIda,
               PerformChecksum,
               &Size);
        if( v6 )
          break;
        ++v17;
        ++v18;
        ++v19;
      }
      while( v17 < (unsigned int)v16 );
    }
    goto LABEL_15;
  }
  return result;
}

Referenced by:

HalpAcpiGetTableWork
HalpAcpiIsCachedTableCompromised