CmpSyncSubKeysAfterDelete
BOOL __fastcall CmpSyncSubKeysAfterDelete(INT64 a1, INT64 a2, UINT64 a3, _DWORD *a4, WCHAR *a5){
unsigned int v5;
_CM_KEY_NODE *v9;
int v10;
_CM_KEY_NODE *v11;
UINT ChildCell;
UINT Cell;
int v15[2];
_UNICODE_STRING KeyName;
ChildCell = 0;
v5 = 0;
v15[0] = -1;
v15[1] = 0;
KeyName = 0i64;
while( 1 )
{
LODWORD(v9) = CmpFindSubKeyByNumber((_HHIVE *)a3, (_CM_KEY_NODE *)a4, v5, &ChildCell);
v10 = (int)v9;
if( (int)v9 < 0 || ChildCell == -1 )
break;
v9 = (_CM_KEY_NODE *)(*(__int64(__fastcall **)(UINT64, _QWORD, int *))(a3 + 8))(a3, ChildCell, v15);
v11 = v9;
if( !v9 )
{
v10 = -1073741670;
LABEL_13:
if( v11 )
LODWORD(v9) = (*(__int64(__fastcall **)(UINT64, int *))(a3 + 16))(a3, v15);
break;
}
CmpInitializeKeyNameString(v9, &KeyName, a5);
Cell = 0;
CmpFindSubKeyByNameWithStatus((_HHIVE *)a1, (_CM_KEY_NODE *)a2, &KeyName, &Cell);
if( Cell == -1 )
{
if( v11->SubKeyCounts[0] + v11->SubKeyCounts[1] )
CmpDeleteTree(a3, ChildCell);
LODWORD(v9) = CmpFreeKeyByCell((_HHIVE *)a3, ChildCell, 1u);
v10 = (int)v9;
if( (int)v9 < 0 )
goto LABEL_13;
}
else
{
++v5;
}
(*(void(__fastcall **)(UINT64, int *))(a3 + 16))(a3, v15);
}
LOBYTE(v9) = v10 >= 0;
return(int)v9;
}Referenced by:
CmpCopySyncTree2