EtwpRealtimeFlushSavedBuffers

INT64 __fastcall EtwpRealtimeFlushSavedBuffers(_WMI_LOGGER_CONTEXT *LoggerContext){
  char *PoolWithTag; 
  char *v4; 
  int v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  bool v9; 
  if( !*((_DWORD *)LoggerContext + 110) || !*((_DWORD *)LoggerContext + 90) )
    return 0i64;
  PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, *((unsigned int *)LoggerContext + 1), 0x50777445ui64);
  v4 = PoolWithTag;
  if( PoolWithTag )
  {
    memset((INT64)PoolWithTag, 0i64);
    v5 = *((_DWORD *)LoggerContext + 110);
    if( v5 )
    {
      while( *((_DWORD *)LoggerContext + 90) )
      {
        v6 = *((_QWORD *)LoggerContext + 51);
        if( EtwpRealtimeRestoreBuffer((__int64)LoggerContext, v4) < 0 )
        {
          *((_DWORD *)LoggerContext + 69) += *((_DWORD *)LoggerContext + 110);
          *((_DWORD *)LoggerContext + 110) = 0;
          *((_QWORD *)LoggerContext + 53) = 0i64;
          *((_DWORD *)LoggerContext + 116) = 3;
          EtwpSendSessionNotification((__int64)LoggerContext, 4u, 0xC0000102);
          EtwpRealtimeZeroTruncateLogfile(LoggerContext);
          ExFreePoolWithTag(v4, 0);
          if( (*((_DWORD *)LoggerContext + 208) & 1) != 0 )
            EtwpRealtimeResetReferenceTime((INT64)LoggerContext);
          return 3221225730i64;
        }
        if( EtwpRealtimeDeliverBuffer(LoggerContext, (_WMI_BUFFER_HEADER *)v4) < 0 )
        {
          v5 = *((_DWORD *)LoggerContext + 110);
          *((_QWORD *)LoggerContext + 51) = v6;
          break;
        }
        if( (*((_DWORD *)LoggerContext + 208) & 1) != 0 && *((_WORD *)v4 + 27) == 3 )
          *((_OWORD *)LoggerContext + 28) = *(_OWORD *)(v4 + 56);
        v7 = *((_QWORD *)LoggerContext + 53);
        v5 = *((_DWORD *)LoggerContext + 110) - 1;
        *((_DWORD *)LoggerContext + 110) = v5;
        v8 = v7 - *((unsigned int *)v4 + 12);
        v9 = *((int *)LoggerContext + 4) < 0;
        *((_QWORD *)LoggerContext + 53) = v8;
        if( v9
          && *((_QWORD *)LoggerContext + 54) - v8 > (unsigned __int64)(unsigned int)(*((_DWORD *)LoggerContext + 1)
                                                                                   * *((_DWORD *)LoggerContext + 63)) )
        {
          _InterlockedExchange((volatile __int32 *)LoggerContext + 4, 0);
          v5 = *((_DWORD *)LoggerContext + 110);
        }
        if( !v5 )
          goto LABEL_14;
      }
      if( v5 )
        goto LABEL_15;
    }
LABEL_14:
    EtwpRealtimeZeroTruncateLogfile(LoggerContext);
LABEL_15:
    ExFreePoolWithTag(v4, 0);
    return 0i64;
  }
  return 3221225495i64;
}

Referenced by:

EtwpLogger