RtlInsertUnicodePrefix
INT8 __fastcall RtlInsertUnicodePrefix(INT64 a1, UINT16 *a2, INT64 a3){
__int16 v6;
INT64 *v7;
__int64 v8;
INT64 i;
INT64 j;
_COMPARISON v11;
__int64 v12;
INT64 v13;
_RTL_SPLAY_LINKS *v14;
_RTL_SPLAY_LINKS *v15;
INT64 v17;
v6 = ComputeUnicodeNameLength((_UNICODE_STRING *)a2);
v7 = (INT64 *)(a3 + 24);
*(_WORD *)(a3 + 2) = v6;
*(_QWORD *)(a3 + 32) = 0i64;
*(_QWORD *)(a3 + 40) = 0i64;
*(_QWORD *)(a3 + 48) = v8;
*(_QWORD *)(a3 + 24) = a3 + 24;
for( i = *(_QWORD *)(a1 + 8); *(__int16 *)(i + 2) > v6; i = *(_QWORD *)(i + 8) )
a1 = i;
if( *(_WORD *)(i + 2) == v6 )
{
for( j = i; ; j = v12 - 24 )
{
v11 = CompareUnicodeStrings(*(const _UNICODE_STRING **)(j + 48), (const _UNICODE_STRING *)a2, 0i64);
if( v11 == IsEqual )
break;
if( v11 == IsGreaterThan )
{
v12 = *(_QWORD *)(j + 32);
if( !v12 )
{
*(_QWORD *)(a3 + 8) = 0i64;
v13 = j + 24;
*(_WORD *)a3 = 2050;
*(_QWORD *)(a3 + 16) = a3;
*(_QWORD *)(j + 32) = v7;
LABEL_12:
*v7 = v13;
goto LABEL_13;
}
}
else
{
v12 = *(_QWORD *)(j + 40);
if( !v12 )
{
*(_QWORD *)(a3 + 8) = 0i64;
v13 = j + 24;
*(_WORD *)a3 = 2050;
*(_QWORD *)(a3 + 16) = a3;
*(_QWORD *)(j + 40) = v7;
goto LABEL_12;
}
}
}
v17 = j;
do
{
if( CompareUnicodeStrings(*(const _UNICODE_STRING **)(v17 + 48), (const _UNICODE_STRING *)a2, 0xFFFFFFFFui64) == IsEqual )
return 0;
v17 = *(_QWORD *)(v17 + 16);
}
while( v17 != j );
*(_QWORD *)(a3 + 8) = 0i64;
*(_WORD *)a3 = 2051;
*(_QWORD *)(a3 + 16) = *(_QWORD *)(j + 16);
*(_QWORD *)(j + 16) = a3;
LABEL_13:
v14 = *(_RTL_SPLAY_LINKS **)(i + 8);
*(_QWORD *)(i + 8) = 0i64;
*(_WORD *)i = 2050;
v15 = RtlSplay((_RTL_SPLAY_LINKS *)(j + 24)) - 1;
LOWORD(v15->Parent) = 2049;
*(_QWORD *)(a1 + 8) = v15;
v15->LeftChild = v14;
}
else
{
*(_QWORD *)(a1 + 8) = a3;
*(_WORD *)a3 = 2049;
*(_QWORD *)(a3 + 8) = i;
*(_QWORD *)(a3 + 16) = a3;
}
return 1;
}Referenced by:
No references.