CmpFinishBeingActiveFlusherAndReconciler

void __fastcall CmpFinishBeingActiveFlusherAndReconciler(_EX_PUSH_LOCK *a1){
  _KEVENT *bf_0; 
  _KEVENT *v3; 
  char v4; 

  CmpLockRegistry();
  ExAcquirePushLockExclusiveEx(a1 + 9, 0i64);
  bf_0 = (_KEVENT *)a1[532]._bf_0;
  v3 = (_KEVENT *)a1[530]._bf_0;
  a1[530]._bf_0 = 0i64;
  a1[529]._bf_0 = 0i64;
  a1[532]._bf_0 = 0i64;
  a1[531]._bf_0 = 0i64;
  v4 = _InterlockedExchangeAdd64(&a1[9]._bf_0, 0xFFFFFFFFFFFFFFFFui64);
  if( (v4 & 2) != 0 && (v4 & 4) == 0 )
    ExfTryToWakePushLock(a1 + 9);
  KeAbPostRelease(&a1[9]);
  CmpUnlockRegistry();
  CmpWakeWriteQueueWaiters(&a1[529], v3);
  CmpWakeWriteQueueWaiters(&a1[531], bf_0);
}

Referenced by:

CmReplaceKey
CmpLoadHiveThread
CmpRefreshHive
CmpSaveKeyByFileCopy