CmpKeyEnumStackEntryBegin
INT64 __fastcall CmpKeyEnumStackEntryBegin(INT64 *a1, UINT64 *a2, INT64 a3){
INT64 *v5;
INT64 *v6;
INT64 result;
INT64 *v8;
INT64 v9;
__int64 v10;
__int64 v11;
unsigned int v12;
unsigned int v13;
INT16 *v14;
unsigned int SubKeyByNumber;
_CM_KEY_NODE *v16;
INT64 v17;
_CM_KEY_NODE *v18;
*a1 = *a2;
a1[1] = (*(__int64(__fastcall **)(UINT64, _QWORD, INT64 *))(*a2 + 8))(*a2, *((unsigned int *)a2 + 2), a1 + 2);
v5 = a1 + 10;
v6 = a1 + 3;
result = -4i64 - (_QWORD)a1;
v8 = a1 + 12;
v9 = a3 - (_QWORD)a1;
v10 = 4i64 - (_QWORD)a1;
v11 = 2i64;
do
{
v12 = *(_DWORD *)((char *)v6 + result + a1[1]);
*(_DWORD *)((char *)a1 + (_QWORD)v6 + v9 - a3 + 8) = v12;
if( a3 )
v13 = *(_DWORD *)((char *)v6 + v9 - 8);
else
v13 = 0;
*(_DWORD *)v6 = v13;
if( v12 > v13 )
{
v14 = (INT16 *)(*(__int64(__fastcall **)(INT64, _QWORD, INT64 *))(*a1 + 8))(
*a1,
*(unsigned int *)((char *)v6 + v10 + a1[1]),
v8 - 5);
*(v5 - 5) = (INT64)v14;
SubKeyByNumber = CmpDoFindSubKeyByNumber(*a1, v14, *(unsigned int *)v6);
*((_DWORD *)v6 + 12) = SubKeyByNumber;
v16 = (_CM_KEY_NODE *)(*(__int64(__fastcall **)(INT64, _QWORD, INT64 *))(*a1 + 8))(*a1, SubKeyByNumber, v8);
*v5 = (INT64)v16;
v17 = (INT64)v16;
v18 = (_CM_KEY_NODE *)a1[15];
if( !v18 || (int)CmpCompareKeysByName(v16, v18) < 0 )
{
a1[15] = v17;
*((_DWORD *)a1 + 28) = *((_DWORD *)v6 + 12);
}
v10 = 4i64 - (_QWORD)a1;
v9 = a3 - (_QWORD)a1;
}
result = -4i64 - (_QWORD)a1;
++v8;
++v5;
v6 = (INT64 *)((char *)v6 + 4);
--v11;
}
while( v11 );
return result;
}Referenced by:
CmpKeyEnumStackBeginEnumerationForKeyNodeStack