CmpFinishBeingActiveFlusherAndReconciler

NTSTATUS __fastcall CmpFinishBeingActiveFlusherAndReconciler(__int64 a1){
  struct _KEVENT *v2; 
  struct _KEVENT *v3; 
  char v4; 
  CmpLockRegistry();
  ExAcquirePushLockExclusiveEx(a1 + 72, 0i64);
  v2 = *(struct _KEVENT **)(a1 + 4256);
  v3 = *(struct _KEVENT **)(a1 + 4240);
  *(_QWORD *)(a1 + 4240) = 0i64;
  *(_QWORD *)(a1 + 4232) = 0i64;
  *(_QWORD *)(a1 + 4256) = 0i64;
  *(_QWORD *)(a1 + 4248) = 0i64;
  v4 = _InterlockedExchangeAdd64((volatile signed __int64 *)(a1 + 72), 0xFFFFFFFFFFFFFFFFui64);
  if( (v4 & 2) != 0 && (v4 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)(a1 + 72));
  KeAbPostRelease((PVOID)(a1 + 72));
  CmpUnlockRegistry();
  CmpWakeWriteQueueWaiters((PVOID)(a1 + 4232), v3);
  return CmpWakeWriteQueueWaiters((PVOID)(a1 + 4248), v2);
}

Referenced by:

CmReplaceKey
CmpLoadHiveThread
CmpRefreshHive
CmpSaveKeyByFileCopy