PfSnArrayGrow

UINT64 __stdcall PfSnArrayGrow(UINT64 DesiredIndex, UINT64 *EntryCountMax, PVOID *Array){
  unsigned int *v3; 
  unsigned int *v4; 
  unsigned int v5; 
  unsigned __int64 v6; 
  unsigned int v7; 
  UINT8 *PoolWithTag; 
  unsigned int v9; 
  UINT8 **v11; 
  v4 = v3;
  if( (unsigned int)DesiredIndex < *v3 )
    return 1;
  v5 = (3 * *v3) >> 1;
  if( v5 < 4 )
    v5 = 4;
  if( (unsigned int)DesiredIndex >= v5 )
  {
    v5 = DesiredIndex + 4;
    if( (int)DesiredIndex + 4 < (unsigned int)DesiredIndex )
      return 0;
  }
  v6 = 8i64 * v5;
  if( v6 > 0xFFFFFFFF )
    return 0;
  v7 = 0;
  PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, (unsigned int)v6, 0x56506343ui64);
  if( PoolWithTag )
  {
    v9 = 8 * *v4;
    if( v9 )
      memmove(PoolWithTag, *v11, v9);
    if( *v11 )
      ExFreePoolWithTag(*v11, 0);
    *v11 = PoolWithTag;
    *v4 = v5;
    return 1;
  }
  return v7;
}

Referenced by:

PfSnVolumeKeyQuery