CmpSyncSubKeysAfterDelete
bool __fastcall CmpSyncSubKeysAfterDelete(__int64 a1, __int64 a2, __int64 a3, _DWORD *a4, _WORD *a5){
unsigned int v5;
int SubKeyByNumber;
_CM_KEY_NODE *v10;
_CM_KEY_NODE *v11;
UINT CellIndex;
UINT CellIndex_4;
int v15[2];
_UNICODE_STRING KeyName;
CellIndex = 0;
v5 = 0;
v15[0] = -1;
v15[1] = 0;
KeyName = 0i64;
while( 1 )
{
SubKeyByNumber = CmpFindSubKeyByNumber((_HHIVE *)a3, (_CM_KEY_NODE *)a4, v5, &CellIndex);
if( SubKeyByNumber < 0 || CellIndex == -1 )
return SubKeyByNumber >= 0;
v10 = (_CM_KEY_NODE *)(*(__int64(__fastcall **)(__int64, _QWORD, int *))(a3 + 8))(a3, CellIndex, v15);
v11 = v10;
if( !v10 )
{
SubKeyByNumber = -1073741670;
LABEL_13:
if( v11 )
(*(void(__fastcall **)(__int64, int *))(a3 + 16))(a3, v15);
return SubKeyByNumber >= 0;
}
CmpInitializeKeyNameString(v10, &KeyName, a5);
CellIndex_4 = 0;
CmpFindSubKeyByNameWithStatus((_HHIVE *)a1, (_CM_KEY_NODE *)a2, &KeyName, &CellIndex_4);
if( CellIndex_4 == -1 )
{
if( v11->SubKeyCounts[0] + v11->SubKeyCounts[1] )
CmpDeleteTree(a3, CellIndex);
SubKeyByNumber = CmpFreeKeyByCell(a3, CellIndex, 1);
if( SubKeyByNumber < 0 )
goto LABEL_13;
}
else
{
++v5;
}
(*(void(__fastcall **)(__int64, int *))(a3 + 16))(a3, v15);
}
}Referenced by:
CmpCopySyncTree2