RtlpMuiRegGetOrAddStringToPool

__int64 __fastcall RtlpMuiRegGetOrAddStringToPool(__int64 a1, const wchar_t *a2, char a3, _DWORD *a4){
  int StringIndexInPool; 
  __int64 v9; 
  unsigned int v10; 
  __int64 v11; 
  UINT64 v12; 
  __int16 v13; 
  __int64 v14; 
  UINT64 v15; 
  __int64 v16; 
  ULONGLONG pullResult; 
  pullResult = 0i64;
  StringIndexInPool = RtlpMuiRegGetStringIndexInPool(a1, a2);
  LODWORD(v9) = StringIndexInPool;
  if( a4 )
    *a4 = 0;
  if( StringIndexInPool >= 0 )
    return(unsigned int)v9;
  v10 = -1;
  if( a1 && a2 )
  {
    v11 = -1i64;
    do
      ++v11;
    while( a2[v11] );
    v12 = v11 + 1;
    if( v12 + *(unsigned __int16 *)(a1 + 10) > *(unsigned __int16 *)(a1 + 8) )
    {
      if( a4 )
        *a4 = v12;
    }
    else if( a3 && *(_WORD *)(a1 + 6) < *(_WORD *)(a1 + 4) && RtlULongLongMult(v12, 2ui64, &pullResult) >= 0 )
    {
      v14 = *(__int16 *)(a1 + 10);
      v9 = *(unsigned __int16 *)(a1 + 6);
      v15 = pullResult;
      *(_WORD *)(a1 + 6) = v13 + v9;
      *(_WORD *)(a1 + 10) = v13 + v14;
      memmove((UINT8 *)(*(_QWORD *)(a1 + 24) + 2 * v14), (UINT8 *)a2, v15);
      v16 = *(_QWORD *)(a1 + 16);
      *(_WORD *)(a1 + 10) += v12;
      *(_WORD *)(v16 + 2 * v9) = v14;
      return(unsigned int)v9;
    }
  }
  return v10;
}

Referenced by:

RtlpMuiRegGetOrAddString