HvWriteLogFile

INT64 __fastcall HvWriteLogFile(_HHIVE *Hive, INT64 UseCapturedData, UINT64 Flags, UINT64 *LogEntrySize){
  UINT64 CurrentLog; 
  __int64 v7; 
  unsigned int CurrentLogOffset; 
  __int64 MinimumLogSequence; 
  char *Storage; 
  __int64 v11; 
  unsigned int v12; 
  unsigned int *v13; 
  INT64 result; 
  unsigned int v15; 
  if( (Hive->HiveFlags & 0x8001) != 0 )
    return 0i64;
  CurrentLog = Hive->CurrentLog;
  if( !(_DWORD)CurrentLog || !*((_QWORD *)&Hive[1].Signature + CurrentLog) )
    return 3221225485i64;
  v7 = *(_QWORD *)&Hive[1].CurrentLogSequence;
  CurrentLogOffset = Hive[1].CurrentLogOffset;
  MinimumLogSequence = Hive[1].MinimumLogSequence;
  if( (_DWORD)CurrentLog == 1 || (_DWORD)CurrentLog == 4 )
  {
    Storage = (char *)&Hive[1].ViewMap.ViewTree.8;
  }
  else if( (_DWORD)CurrentLog == 5 )
  {
    Storage = (char *)Hive[1].Storage;
  }
  else
  {
    Storage = 0i64;
  }
  if( MinimumLogSequence + Hive->CurrentLogOffset > *(_QWORD *)Storage )
    CmpDoFileSetSizeEx((INT64)Hive, CurrentLog, MinimumLogSequence + Hive->CurrentLogOffset, 1);
  v11 = 0i64;
  if( !CurrentLogOffset )
  {
LABEL_13:
    result = CmpFileFlushAndPurge((INT64)Hive, Hive->CurrentLog);
    if( (int)result < 0 )
      return result;
    ++Hive->CurrentLogSequence;
    v15 = HvpLogTypeToLogArrayIndex(Hive->CurrentLog);
    Hive->LogDataPresent[v15] = 1;
    CmpTraceHiveFlushWroteLogFile(v15);
    *(_DWORD *)LogEntrySize = MinimumLogSequence;
    return 0i64;
  }
  v12 = Hive->CurrentLogOffset;
  while( 1 )
  {
    v13 = (unsigned int *)(v7 + 24 * v11);
    *v13 = v12;
    result = ((__int64(__fastcall *)(_HHIVE *, _QWORD, unsigned int *, __int64, _DWORD))Hive->FileWrite)(
               Hive,
               Hive->CurrentLog,
               v13,
               1i64,
               0);
    if( (int)result < 0 )
      return result;
    v11 = (unsigned int)(v11 + 1);
    Hive->CurrentLogOffset += v13[4];
    v12 = Hive->CurrentLogOffset;
    if( (unsigned int)v11 >= CurrentLogOffset )
      goto LABEL_13;
  }
}

Referenced by:

CmpFlushHive