CmpDoFlushNextHive
UINT8 __stdcall CmpDoFlushNextHive(UINT8 *WriteError, UINT64 *NextDueDelay){
unsigned __int64 v2;
UINT8 v3;
_CMHIVE *NextActiveHive;
UINT64 v7;
UINT64 UnbiasedInterruptTime;
unsigned __int64 v10;
v2 = -1i64;
v3 = 0;
if( BYTE1(NlsMbCodePageTag) )
return 0;
NextActiveHive = CmpGetNextActiveHive(0i64);
if( NextActiveHive )
{
do
{
v7 = -1i64;
if( (NextActiveHive->Hive.HiveFlags & 3) == 0 )
{
if( NextActiveHive->Hive.DirtyCount || NextActiveHive->Hive.BaseBlockDirty )
{
UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
v10 = NextActiveHive->DirtyTime + 10000000i64 * (unsigned int)dword_140C00400;
if( UnbiasedInterruptTime >= v10 )
{
if( CmpFlushHive(NextActiveHive, 0x12ui64) < 0 )
{
v3 = 1;
*WriteError = 1;
v7 = 10000000i64 * (unsigned int)dword_140C0040C;
}
}
else
{
v3 = 1;
v7 = v10 - UnbiasedInterruptTime;
}
}
else if( (NextActiveHive->FlushFlags & 1) == 0 )
{
CmpFlushHive(NextActiveHive, 0x22ui64);
}
}
if( NextActiveHive->Frozen == 1 )
{
LOCK_HIVE_LOAD();
CmpLockRegistryFreezeAware(0);
if( NextActiveHive->Frozen == 1 )
CmpDoQueueLateUnloadWorker(NextActiveHive);
CmpUnlockRegistry();
UNLOCK_HIVE_LOAD();
}
if( v7 >= v2 )
v7 = v2;
v2 = v7;
NextActiveHive = CmpGetNextActiveHive(NextActiveHive);
}
while( NextActiveHive );
if( v3 )
*NextDueDelay = v7;
}
return v3;
}Referenced by:
No references.