CmpCleanUpKCBCacheTable
VOID __fastcall CmpCleanUpKCBCacheTable(INT64 a1){
unsigned int v1;
__int64 v2;
__int64 v3;
__int64 *v4;
__int64 i;
__int64 v6;
__int64 *v7;
INT64 RegLockHeldEx[2];
KAPC_STATE ApcState;
v1 = *(_DWORD *)(a1 + 1648);
v2 = *(_QWORD *)(a1 + 1640);
memset(&ApcState, 0, sizeof(ApcState));
*(_OWORD *)RegLockHeldEx = 0i64;
CmpAttachToRegistryProcess(&ApcState);
CmpInitializeDelayDerefContext(RegLockHeldEx);
v3 = 0i64;
if( v1 )
{
v4 = (__int64 *)(v2 + 16);
do
{
for( i = *v4; i; i = *v7 )
{
v6 = i - 16;
if( *(_QWORD *)(i - 16) )
{
v7 = (__int64 *)(v6 + 24);
}
else
{
CmpRemoveFromDelayedClose(i - 16);
CmpCleanUpKcbCacheWithLock((_CM_KEY_CONTROL_BLOCK *)v6, (INT64)RegLockHeldEx);
if( (*(_DWORD *)(v6 + 8) & 0x80000) != 0 )
CmpFreeKeyControlBlock((_CM_KEY_CONTROL_BLOCK *)v6);
CmpDrainDelayDerefContext((UINT64 **)RegLockHeldEx);
v7 = (__int64 *)(v2 + 16 + 24 * v3);
}
}
v3 = (unsigned int)(v3 + 1);
v4 += 3;
}
while( (unsigned int)v3 < v1 );
}
KiUnstackDetachProcess(&ApcState, 0i64);
}Referenced by:
CmpCleanUpHigherLayerKcbCachesPostCallback
CmpEnumerateAllOpenSubKeys
CmpRefreshHive