CmpEnumerateAllOpenSubKeys
void __fastcall CmpEnumerateAllOpenSubKeys(__int64 a1, char a2, __int64 (__fastcall *a3)(__int64, __int64), __int64 a4){
INT64 v4;
__int64 v9;
unsigned int v10;
int v11;
int v12;
v4 = *(_QWORD *)(a1 + 32);
CmpCleanUpKCBCacheTable(v4);
if( *(_QWORD *)a1 != 1i64 && ((*(_DWORD *)(a1 + 184) & 0x40000) == 0 || *(_QWORD *)a1 != 2i64) )
{
v9 = 0i64;
v10 = 0;
if( *(_DWORD *)(v4 + 1648) )
{
while( 1 )
{
v11 = CmpEnumerateKcbCacheBucket(a1, *(_QWORD *)(v4 + 1640) + 24i64 * v10, a3, a4);
if( v11 == 1 )
break;
if( v11 == 2 )
--v10;
if( ++v10 >= *(_DWORD *)(v4 + 1648) )
goto LABEL_9;
}
}
else
{
LABEL_9:
if( a2 && *(_DWORD *)(v4 + 1664) )
{
do
{
v12 = CmpEnumerateKcbCacheBucket(a1, *(_QWORD *)(v4 + 1656) + 24 * v9, a3, a4);
if( v12 == 1 )
break;
if( v12 == 2 )
LODWORD(v9) = v9 - 1;
v9 = (unsigned int)(v9 + 1);
}
while( (unsigned int)v9 < *(_DWORD *)(v4 + 1664) );
}
}
}
}Referenced by:
CmpDoesKeyHaveOpenSubkeys
CmpInvalidateSubtree
CmpPrepareForSubtreeInvalidation
CmpSearchForOpenSubKeys