RtlpMuiRegResizeStringPool

_MUISTRINGPOOL *__stdcall RtlpMuiRegResizeStringPool(
        _MUISTRINGPOOL *OldPool,
        INT16 NewStringsSize,
        INT16 NewPoolSize,
        UINT8 CreateCopy){
  _MUISTRINGPOOL *v4; 
  INT16 v7; 
  INT16 v8; 
  INT64 v9; 
  INT64 v10; 
  size_t v11; 
  size_t v12; 
  _MUISTRINGPOOL *StringPool; 

  v4 = 0i64;
  v7 = 4;
  if( NewStringsSize >= 1 )
    v7 = NewStringsSize;
  v8 = 40;
  if( NewPoolSize >= 1 )
    v8 = NewPoolSize;
  if( OldPool )
  {
    v9 = (unsigned int)v7;
    if( (int)v9 >= *((unsigned __int16 *)OldPool + 3) )
    {
      v10 = (unsigned int)v8;
      if( (int)v10 >= *((unsigned __int16 *)OldPool + 5) )
      {
        v11 = 2 * *((unsigned __int16 *)OldPool + 2);
        v12 = 2 * *((unsigned __int16 *)OldPool + 4);
        StringPool = RtlpMuiRegCreateStringPool(v9, v10);
        v4 = StringPool;
        if( StringPool )
        {
          memmove(*((VOID **)StringPool + 2), *((const VOID **)OldPool + 2), v11);
          memmove(*((VOID **)v4 + 3), *((const VOID **)OldPool + 3), v12);
          *((_WORD *)v4 + 3) = *((_WORD *)OldPool + 3);
          *((_WORD *)v4 + 5) = *((_WORD *)OldPool + 5);
          if( !CreateCopy )
            ExFreePoolWithTag(OldPool, 0);
        }
      }
    }
  }
  return v4;
}

Referenced by:

RtlpMuiRegGrowStringPool