HalpAuditAllocateRsdtArrayTable

__int64 __fastcall HalpAuditAllocateRsdtArrayTable(int **a1){
  unsigned int v1; 
  int v3; 
  VOID **PoolWithTag; 
  int *v5; 
  int *v6; 

  v1 = 0;
  if( *a1 )
    v3 = 2 * **a1;
  else
    v3 = 4;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)(32 * v3 + 8), 543973704i64);
  v5 = (int *)PoolWithTag;
  if( PoolWithTag )
  {
    memset(PoolWithTag, 0i64, 32 * v3 + 8);
    *v5 = v3;
    v6 = *a1;
    if( *a1 )
    {
      v5[1] = v6[1];
      memmove(v5 + 2, v6 + 2, 32 * v6[1]);
      ExFreePoolWithTag(v6, 0);
    }
    else
    {
      v5[1] = 0;
    }
    *a1 = v5;
  }
  else
  {
    return(unsigned int)-1073741801;
  }
  return v1;
}

Referenced by:

HalpAuditEnumerateRsdts
HalpAuditEnumerateRsdtsInRange