HalpAuditAllocateRsdtArrayTable

__int64 __fastcall HalpAuditAllocateRsdtArrayTable(int **a1){
  unsigned int v1; 
  int v3; 
  VOID *PoolWithTag; 
  VOID *v5; 
  int *v6; 
  v1 = 0;
  if( *a1 )
    v3 = 2 * **a1;
  else
    v3 = 4;
  PoolWithTag = ExAllocatePoolWithTag(PagedPool, (unsigned int)(32 * v3 + 8), 0x206C6148ui64);
  v5 = PoolWithTag;
  if( PoolWithTag )
  {
    memset((INT64)PoolWithTag, 0i64);
    *(_DWORD *)v5 = v3;
    v6 = *a1;
    if( *a1 )
    {
      *((_DWORD *)v5 + 1) = v6[1];
      memmove((UINT8 *)v5 + 8, (UINT8 *)v6 + 8, 32i64 * (unsigned int)v6[1]);
      ExFreePoolWithTag(v6, 0);
    }
    else
    {
      *((_DWORD *)v5 + 1) = 0;
    }
    *a1 = (int *)v5;
  }
  else
  {
    return(unsigned int)-1073741801;
  }
  return v1;
}

Referenced by:

HalpAuditEnumerateRsdts
HalpAuditEnumerateRsdtsInRange