CmpLockRegistryFreezeAware
NTSTATUS __stdcall CmpLockRegistryFreezeAware(UINT8 LockExclusive){
UINT64 v2;
UINT8 v3;
UINT8 v4;
IRP *v6;
__int128 v7;
struct _KEVENT Event;
v7 = 0i64;
memset(&Event, 0, sizeof(Event));
KeInitializeEvent(&Event, SynchronizationEvent, 0);
if( LockExclusive )
CmpLockRegistryExclusive();
else
CmpLockRegistry();
while( CmpFreezeThawState == 1 )
{
KeResetEvent(&Event, v2, v3, v4, v6);
ExAcquirePushLockExclusiveEx((UINT64)&CmpFreezeListLock, 0i64);
if( *(__int64 **)qword_140C47BC8 != &CmpFreezeThawWaitListHead )
__fastfail(3u);
*((_QWORD *)&v7 + 1) = qword_140C47BC8;
*(_QWORD *)&v7 = &CmpFreezeThawWaitListHead;
*(_QWORD *)qword_140C47BC8 = &v7;
qword_140C47BC8 = (__int64)&v7;
ExReleasePushLockEx((UINT64)&CmpFreezeListLock, 0i64);
CmpUnlockRegistry();
KeWaitForSingleObject(&Event, Executive, 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