RtlpMuiRegResizeStringPool

CHAR *__fastcall RtlpMuiRegResizeStringPool(const VOID **P, INT16 a2, INT16 a3, CHAR a4){
  _QWORD *v4; 
  INT16 v7; 
  INT16 v8; 
  UINT64 v9; 
  UINT64 v10; 
  _QWORD *StringPool; 
  v4 = 0i64;
  v7 = 4;
  if( a2 >= 1 )
    v7 = a2;
  v8 = 40;
  if( a3 >= 1 )
    v8 = a3;
  if( P )
  {
    if( v7 >= (int)*((unsigned __int16 *)P + 3) && v8 >= (int)*((unsigned __int16 *)P + 5) )
    {
      v9 = 2i64 * *((unsigned __int16 *)P + 2);
      v10 = 2i64 * *((unsigned __int16 *)P + 4);
      StringPool = RtlpMuiRegCreateStringPool(v7, v8);
      v4 = StringPool;
      if( StringPool )
      {
        memmove((UINT8 *)StringPool[2], (UINT8 *)P[2], v9);
        memmove((UINT8 *)v4[3], (UINT8 *)P[3], v10);
        *((_WORD *)v4 + 3) = *((_WORD *)P + 3);
        *((_WORD *)v4 + 5) = *((_WORD *)P + 5);
        if( !a4 )
          ExFreePoolWithTag(P, 0);
      }
    }
  }
  return(CHAR *)v4;
}

Referenced by:

RtlpMuiRegGrowStringPool