CmpDoFlushAll
VOID __stdcall CmpDoFlushAll(UINT64 Flags){
int v1;
volatile signed __int32 *LastHive;
volatile signed __int32 *i;
EVENT_DESCRIPTOR *v4;
struct _EX_RUNDOWN_REF *NextHive;
ULONG_PTR v6;
v1 = Flags;
if( !BYTE1(NlsMbCodePageTag) )
{
LastHive = (volatile signed __int32 *)CmpGetLastHive();
if( LastHive )
{
for( i = 0i64; ; i = (volatile signed __int32 *)v6 )
{
NextHive = (struct _EX_RUNDOWN_REF *)CmpGetNextHive(i);
v6 = (ULONG_PTR)NextHive;
if( !NextHive )
break;
if( ExAcquireRundownProtection(NextHive + 204) )
{
if( (*(_DWORD *)(v6 + 160) & 2) == 0 )
CmpFlushHive(v6, v1, v4);
ExReleaseRundownProtection((PEX_RUNDOWN_REF)(v6 + 1632));
}
if( (volatile signed __int32 *)v6 == LastHive )
break;
}
CmpQuitNextHive((volatile signed __int32 *)v6);
CmpDereferenceHive(LastHive);
}
}
}Referenced by:
CmReconcileAndValidateAllHives
CmpForceFlushWorker
NtFlushKey