CmpGetNextActiveHive
_CMHIVE *__stdcall CmpGetNextActiveHive(_CMHIVE *OldHive){
_CMHIVE *v1;
__int64 *v3;
v1 = 0i64;
v3 = &CmpHiveListHead;
if( OldHive )
v3 = (__int64 *)((char *)OldHive + 1600);
ExAcquirePushLockSharedEx((UINT64)&CmpHiveListHeadLock, 0i64);
while( 1 )
{
v3 = (__int64 *)*v3;
if( v3 == &CmpHiveListHead )
break;
v1 = (_CMHIVE *)(v3 - 200);
if( ExAcquireRundownProtection((PEX_RUNDOWN_REF)v3 + 4) )
break;
v1 = 0i64;
}
ExReleasePushLockEx((UINT64)&CmpHiveListHeadLock, 0i64);
if( OldHive )
ExReleaseRundownProtection((PEX_RUNDOWN_REF)OldHive + 204);
return v1;
}Referenced by:
CmEtwRunDown
CmFreezeRegistry
CmShutdownSystem
CmThawRegistry
CmpBlockTwoHiveWrites
CmpDoFlushNextHive
CmpDoLocalizeNextHive
CmpDoReconcileNextHive
CmpFreeAllMemory
CmpHandlePageFileOpenNotification
CmpIsHiveAlreadyLoaded
CmpLockKcbStackFlusherLocksExclusive
CmpTransMgrCommit
CmpTransMgrPrepare
CmpUpdatePhaseAccessBit