HvGetEffectiveLogSizeCapForHive

UINT64 __stdcall HvGetEffectiveLogSizeCapForHive(_HHIVE *Hive){
  unsigned int Length; 
  unsigned __int64 LogFileSizeCap; 
  int v3; 
  unsigned __int64 v4; 
  unsigned int v5; 
  UINT64 result; 

  if( (Hive[2].Storage[1].FreeDisplay[6].RealVectorSize & 0x800) != 0 )
    return 0x2000000i64;
  Length = Hive->Storage[0].Length;
  LogFileSizeCap = Hive->LogFileSizeCap;
  v3 = 0x2000;
  if( Length < 0x2000 )
    v3 = Length;
  v4 = (unsigned int)(8 * v3);
  v5 = Length - v3;
  if( v5 )
    v4 += (unsigned __int64)v5 >> 2;
  if( v4 >= LogFileSizeCap )
    LODWORD(v4) = LogFileSizeCap;
  result = (unsigned int)v4;
  if( CmpLogFileSizeCap && (unsigned int)CmpLogFileSizeCap >= 0x80000 && CmpLogFileSizeCap < (unsigned int)v4 )
    result = (unsigned int)CmpLogFileSizeCap;
  if( (unsigned int)result < 0x8000 )
    return 0x8000i64;
  return result;
}

Referenced by:

CmpAdjustRequestedFileSize
CmpDoReconcileNextHive
CmpGenerateFlushControlData
CmpIsHiveEligibleForLazyReconcile
HvSwapLogFiles
HvTruncateAllLogFilesIfRequired
HvTruncateCurrentLogFileIfRequired