CmpGetNextHive
__int64 *__fastcall CmpGetNextHive(volatile signed __int32 *P){
__int64 *v1;
__int64 **v3;
__int64 *v4;
__int64 **v5;
v1 = 0i64;
v3 = (__int64 **)&CmpHiveListHead;
if( P )
v3 = (__int64 **)(P + 400);
ExAcquirePushLockSharedEx((UINT64)&CmpHiveListHeadLock, 0i64);
v4 = *v3;
while( v4 != &CmpHiveListHead )
{
v1 = v4 - 200;
if( CmpReferenceHive((_CMHIVE *)(v4 - 200)) )
break;
v4 = *v5;
v1 = 0i64;
}
ExReleasePushLockEx((UINT64)&CmpHiveListHeadLock, 0i64);
if( P && _InterlockedExchangeAdd(P + 1068, 0xFFFFFFFF) == 1 )
CmpDeleteHive((PVOID)P);
return v1;
}Referenced by:
CmLoadAppKey
CmpBlockHiveWrites
CmpDoFlushAll
CmpUnblockHiveWrites