CmpLockRegistryFreezeAware
NTSTATUS __stdcall CmpLockRegistryFreezeAware(UINT8 LockExclusive){
__int128 v3;
__int128 Object;
__int64 v5;
v5 = 0i64;
v3 = 0i64;
Object = 0i64;
KeInitializeEvent((INT64)&Object, 1, 0);
if( LockExclusive )
CmpLockRegistryExclusive();
else
CmpLockRegistry();
while( *(&stru_140CF2E80 + 1623) == 1 )
{
KeResetEvent((_KEVENT *)&Object);
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 60, 0i64);
if( (_UNKNOWN *)**(&CmpDummyThreadEvent + 49) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 384) )
__fastfail(3u);
*((_QWORD *)&v3 + 1) = *(&CmpDummyThreadEvent + 49);
*(_QWORD *)&v3 = (char *)&CmpDummyThreadEvent + 384;
**(&CmpDummyThreadEvent + 49) = &v3;
*(&CmpDummyThreadEvent + 49) = &v3;
ExReleasePushLockEx((ULONG_PTR)&CmpDummyThreadEvent + 480, 0);
CmpUnlockRegistry();
KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
if( LockExclusive )
CmpLockRegistryExclusive();
else
CmpLockRegistry();
}
return 0;
}Referenced by:
CmLoadAppKey
CmRestoreKey
CmpBecomeActiveFlusherAndReconciler
CmpDoFlushNextHive
CmpFlushHive
CmpLateUnloadHiveWorker
CmpLoadKeyCommon
CmpPerformUnloadKey
CmpResolveHiveLoadConflict
CmpStartRMLogs
CmpTryToRundownHive
ExpWatchProductTypeWork
NtFlushKey