CmpKeyEnumStackEntryAdvance
INT64 __fastcall CmpKeyEnumStackEntryAdvance(__int64 *a1){
__int64 v1;
int v3;
__int64 v4;
_CM_KEY_NODE **v5;
INT64 result;
__int64 v7;
__int64 v8;
__int64 *v9;
int v10;
UINT64 v11;
unsigned int SubKeyByNumber;
__int64 *v13;
_CM_KEY_NODE *v14;
_CM_KEY_NODE *v15;
v1 = a1[15];
v3 = 0;
v4 = 0i64;
v5 = (_CM_KEY_NODE **)(a1 + 10);
result = (INT64)(a1 + 10);
v7 = 2i64;
while( *(_QWORD *)result != v1 )
{
++v3;
++v4;
result += 8i64;
if( v4 >= 2 )
goto LABEL_7;
}
v8 = v3;
v9 = &a1[v3];
result = (*(__int64(__fastcall **)(__int64, __int64 *))(*a1 + 16))(*a1, v9 + 12);
a1[v8 + 10] = 0i64;
v10 = *((_DWORD *)a1 + v8 + 6);
*((_DWORD *)a1 + v8 + 18) = -1;
v11 = (unsigned int)(v10 + 1);
*((_DWORD *)a1 + v8 + 6) = v11;
if( (unsigned int)v11 < *((_DWORD *)a1 + v8 + 8) )
{
SubKeyByNumber = CmpDoFindSubKeyByNumber(*a1, (INT16 *)a1[v8 + 5], v11);
*((_DWORD *)a1 + v8 + 18) = SubKeyByNumber;
result = (*(__int64(__fastcall **)(__int64, _QWORD, __int64 *))(*a1 + 8))(*a1, SubKeyByNumber, v9 + 12);
a1[v8 + 10] = result;
}
LABEL_7:
a1[15] = 0i64;
v13 = a1 + 9;
*((_DWORD *)a1 + 28) = -1;
do
{
v14 = *v5;
if( *v5 )
{
v15 = (_CM_KEY_NODE *)a1[15];
if( !v15 || (result = CmpCompareKeysByName(*v5, v15), (int)result < 0) )
{
a1[15] = (__int64)v14;
result = *(unsigned int *)v13;
*((_DWORD *)a1 + 28) = result;
}
}
++v5;
v13 = (__int64 *)((char *)v13 + 4);
--v7;
}
while( v7 );
return result;
}Referenced by:
CmpKeyEnumStackAdvanceInternal