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