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