SmBinaryArrayGrow

VOID **__fastcall SmBinaryArrayGrow(__int64 a1, unsigned int a2){
  __int64 v2; 
  __int64 v3; 
  unsigned int v4; 
  unsigned int v5; 
  VOID **v6; 
  __int64 v7; 
  UINT64 v9; 
  VOID **PoolWithTag; 

  v2 = 0i64;
  v3 = a1;
  _BitScanReverse((unsigned int *)&a1, a2);
  v5 = a2 ^ (1 << v4);
  if( v4 < 0x20 )
  {
    v6 = *(VOID ***)(v3 + 8 * a1);
    v7 = (unsigned int)a1;
    if( !v6 )
    {
      v9 = (unsigned int)(16 * (1 << a1));
      PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v9, 1094872435i64);
      v6 = PoolWithTag;
      if( !PoolWithTag )
        return(VOID **)v2;
      memset(PoolWithTag, 0i64, v9);
      *(_QWORD *)(v3 + 8 * v7) = v6;
    }
    return &v6[2 * v5];
  }
  return(VOID **)v2;
}

Referenced by:

SmHpBufferAlloc