EtwpFlushBufferToLogfile

NTSTATUS __stdcall EtwpFlushBufferToLogfile(_WMI_LOGGER_CONTEXT *LoggerContext, _WMI_BUFFER_HEADER *Buffer){
  __int64 MaximumFileSize; 
  unsigned __int64 Length; 
  __int64 LastFlushedBuffer; 
  unsigned int LoggerMode; 
  int v8; 
  _ETW_SILODRIVERSTATE *SiloState; 
  _UNICODE_STRING *v11; 
  UINT64 v12; 
  __int64 v13; 
  _IO_STATUS_BLOCK IoStatusBlock; 

  MaximumFileSize = LoggerContext->MaximumFileSize;
  Length = *(_DWORD *)Buffer;
  IoStatusBlock = 0i64;
  if( (_DWORD)MaximumFileSize )
  {
    LastFlushedBuffer = LoggerContext->LastFlushedBuffer;
    LoggerMode = LoggerContext->LoggerMode;
    if( Length * LastFlushedBuffer >= MaximumFileSize
                                     * ((-(__int64)((LoggerMode & 0x2000) != 0) & 0xFFFFFFFFFFF00400ui64) + 0x100000) )
    {
      if( (LoggerMode & 2) != 0 )
      {
        LoggerContext->ByteOffset.QuadPart = LoggerContext->BufferSize;
        LoggerContext->LastFlushedBuffer = 1;
      }
      else
      {
        if( (LoggerMode & 8) == 0 )
        {
          v8 = -1073741432;
          if( (LoggerContext->Flags & 0x100) == 0 )
          {
            _InterlockedOr((volatile signed __int32 *)&LoggerContext->832, 0x100u);
            if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_MAX_FILE_SIZE_REACHED) )
              EtwpEventWriteTemplateMaxFileSize(
                &LoggerContext->LogFileName,
                v11,
                v12,
                (UINT64)&LoggerContext->LoggerName,
                (_GUID *)&LoggerContext->LogFileName);
          }
          goto LABEL_16;
        }
        if( (LoggerContext->$9091B98C86B9D902DEA615B340B1CB3F::_bf_0 & 1) == 0 )
        {
          EtwpGenerateFileName(
            &LoggerContext->LogFilePattern,
            (INT64 *)&LoggerContext->FileCounter,
            &LoggerContext->NewLogFileName);
          _InterlockedOr((volatile signed __int32 *)&LoggerContext->836, 1u);
        }
      }
    }
  }
  v8 = ZwWriteFile(
         (_HANDLE)LoggerContext->LogFileHandle,
         0,
         0i64,
         0i64,
         &IoStatusBlock,
         Buffer,
         Length,
         &LoggerContext->ByteOffset,
         0i64);
  if( v8 < 0 )
  {
    if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_WRITE_FAILED) )
      EtwpEventWriteTemplateAdmin(
        (__int64)&LoggerContext->LogFileName,
        &ETW_EVENT_WRITE_FAILED,
        v13,
        &LoggerContext->LoggerName.Length,
        &LoggerContext->LogFileName.Length,
        v8,
        LoggerContext->LoggerMode);
  }
  else
  {
    SiloState = LoggerContext->SiloState;
    LoggerContext->ByteOffset.QuadPart += Length;
    _InterlockedExchangeAdd64((volatile signed __int64 *)&SiloState->LogfileBytesWritten, Length);
  }
  if( v8 >= 0 )
  {
    ++LoggerContext->BuffersWritten;
    ++LoggerContext->LastFlushedBuffer;
    return v8;
  }
LABEL_16:
  _InterlockedIncrement((volatile signed __int32 *)&LoggerContext->LogBuffersLost);
  if( v8 == -1073741670 )
    return 0;
  return v8;
}

Referenced by:

EtwpBufferingModeFlush
EtwpFlushBuffer