CmpDoReconcileNextHive
UINT8 __stdcall CmpDoReconcileNextHive(UINT8 *WriteError, UINT64 *NextDueDelay){
UINT8 v2;
UINT64 v3;
_CMHIVE *v6;
_CMHIVE *NextActiveHive;
unsigned __int64 v8;
UINT64 UnbiasedInterruptTime;
unsigned __int64 v10;
unsigned int EffectiveLogSizeCapForHive;
v2 = 0;
v3 = 10000000i64 * (unsigned int)dword_140C004C4;
if( !BYTE1(NlsMbCodePageTag) )
{
v6 = 0i64;
while( 1 )
{
NextActiveHive = CmpGetNextActiveHive(v6);
if( !NextActiveHive )
break;
v8 = -1i64;
UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
if( CmpIsHiveEligibleForLazyReconcile(NextActiveHive) )
{
EffectiveLogSizeCapForHive = HvGetEffectiveLogSizeCapForHive(&NextActiveHive->Hive);
if( CmpFlushHive(NextActiveHive, NextActiveHive->Hive.CurrentLogOffset < EffectiveLogSizeCapForHive ? 22 : 6) < 0 )
{
*WriteError = 1;
v8 = UnbiasedInterruptTime + 10000000i64 * (unsigned int)dword_140C004CC;
}
}
else if( NextActiveHive->Hive.UnreconciledCount )
{
if( (NextActiveHive->Hive.HiveFlags & 0x8001) == 0 )
{
v2 = 1;
v10 = NextActiveHive->UnreconciledTime + 10000000i64 * (unsigned int)dword_140C004C0;
if( UnbiasedInterruptTime < v10 )
v8 = v10 - UnbiasedInterruptTime;
}
}
v6 = NextActiveHive;
if( v8 >= v3 )
v8 = v3;
v3 = v8;
}
CmpFlushUnsupportedOperationTelemetry();
if( v2 )
*NextDueDelay = v3;
}
return v2;
}Referenced by:
No references.