CmpBecomeActiveFlusherAndReconciler
void __fastcall CmpBecomeActiveFlusherAndReconciler(__int64 a1){
volatile signed __int64 *v2;
_HIVE_WRITE_WAIT_QUEUE *v3;
UINT64 v4;
char v5;
_HIVE_WRITE_WAIT_QUEUE *v6;
v2 = (volatile signed __int64 *)(a1 + 72);
v3 = (_HIVE_WRITE_WAIT_QUEUE *)(a1 + 4248);
while( 1 )
{
CmpLockRegistryFreezeAware(0);
ExAcquirePushLockExclusiveEx((UINT64)v2, 0i64);
if( PoIsInitializedStopWatch(v3) )
{
v6 = v3;
goto LABEL_8;
}
if( !PoIsInitializedStopWatch((_QWORD *)(a1 + 4232)) )
break;
v6 = (_HIVE_WRITE_WAIT_QUEUE *)(a1 + 4232);
LABEL_8:
CmpWaitOnHiveWriteQueue((_CMHIVE *)a1, v6, v4);
}
CmpAcquireWriteQueue(v3);
CmpAcquireWriteQueue((_QWORD *)(a1 + 4232));
v5 = _InterlockedExchangeAdd64(v2, 0xFFFFFFFFFFFFFFFFui64);
if( (v5 & 2) != 0 && (v5 & 4) == 0 )
ExfTryToWakePushLock(v2);
KeAbPostRelease((PVOID)v2);
CmpUnlockRegistry();
}Referenced by:
CmReplaceKey
CmpLoadHiveThread
CmpRefreshHive
CmpSaveKeyByFileCopy