EtwpFlushBufferToLogfile

INT64 __fastcall EtwpFlushBufferToLogfile(_WMI_LOGGER_CONTEXT *LoggerContext, _WMI_BUFFER_HEADER *Buffer){
  __int64 v2; 
  unsigned __int64 BufferSize; 
  __int64 v6; 
  int v7; 
  unsigned __int64 v8; 
  NTSTATUS v9; 
  EVENT_DESCRIPTOR *v10; 
  __int64 v11; 
  UNICODE_STRING *v13; 
  UINT64 v14; 
  const _GUID *v15; 
  PVOID Buffera; 
  UINT64 Length; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  v2 = *((unsigned int *)LoggerContext + 77);
  BufferSize = Buffer->BufferSize;
  IoStatusBlock = 0i64;
  if( (_DWORD)v2 )
  {
    v6 = *((unsigned int *)LoggerContext + 55);
    v7 = *((_DWORD *)LoggerContext + 3);
    v8 = BufferSize * v6;
    if( v8 >= v2 * ((-(__int64)((v7 & 0x2000) != 0) & 0xFFFFFFFFFFF00400ui64) + 0x100000) )
    {
      if( (v7 & 2) != 0 )
      {
        *((_QWORD *)LoggerContext + 29) = *((unsigned int *)LoggerContext + 1);
        *((_DWORD *)LoggerContext + 55) = 1;
      }
      else
      {
        if( (v7 & 8) == 0 )
        {
          v9 = -1073741432;
          if( (*((_DWORD *)LoggerContext + 208) & 0x100) == 0 )
          {
            _InterlockedOr((volatile signed __int32 *)LoggerContext + 208, 0x100u);
            if( EtwEventEnabled(
                   EtwpEventTracingProvRegHandle,
                   (EVENT_DESCRIPTOR *)&ETW_EVENT_MAX_FILE_SIZE_REACHED,
                   (EVENT_DESCRIPTOR *)v8) )
            {
              EtwpEventWriteTemplateMaxFileSize(
                (UNICODE_STRING *)((char *)LoggerContext + 168),
                v13,
                v14,
                (UINT64)LoggerContext + 152,
                (GUID *)((char *)LoggerContext + 168));
            }
          }
          goto LABEL_16;
        }
        if( (*((_DWORD *)LoggerContext + 209) & 1) == 0 )
        {
          EtwpGenerateFileName(
            (_UNICODE_STRING *)((char *)LoggerContext + 184),
            (INT64 *)LoggerContext + 39,
            (_UNICODE_STRING *)((char *)LoggerContext + 200));
          _InterlockedOr((volatile signed __int32 *)LoggerContext + 209, 1u);
        }
      }
    }
  }
  v9 = ZwWriteFile(
         *((HANDLE *)LoggerContext + 102),
         0i64,
         0i64,
         0i64,
         &IoStatusBlock,
         Buffer,
         BufferSize,
         (PLARGE_INTEGER)LoggerContext + 29,
         0i64);
  if( v9 < 0 )
  {
    if( EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_WRITE_FAILED, v10) )
    {
      LODWORD(Length) = *((_DWORD *)LoggerContext + 3);
      LODWORD(Buffera) = v9;
      EtwpEventWriteTemplateAdmin(
        (UINT64)LoggerContext + 168,
        &ETW_EVENT_WRITE_FAILED,
        v15,
        (const _UNICODE_STRING *)((char *)LoggerContext + 152),
        (const _UNICODE_STRING *)((char *)LoggerContext + 168),
        (const INT64)Buffera,
        Length);
    }
  }
  else
  {
    v11 = *((_QWORD *)LoggerContext + 135);
    *((_QWORD *)LoggerContext + 29) += BufferSize;
    _InterlockedExchangeAdd64((volatile signed __int64 *)(v11 + 4128), BufferSize);
  }
  if( v9 >= 0 )
  {
    ++*((_DWORD *)LoggerContext + 66);
    ++*((_DWORD *)LoggerContext + 55);
    return(unsigned int)v9;
  }
LABEL_16:
  _InterlockedIncrement((volatile signed __int32 *)LoggerContext + 67);
  if( v9 == -1073741670 )
    return 0;
  return(unsigned int)v9;
}

Referenced by:

EtwpBufferingModeFlush
EtwpFlushBuffer