EtwpFlushTrace

NTSTATUS __stdcall EtwpFlushTrace(_ETW_SILODRIVERSTATE *SiloState, _WMI_LOGGER_INFORMATION *LoggerInfo){
  NTSTATUS result; 
  INT16 v5; 
  INT64 v6; 
  _ETHREAD *CurrentThread; 
  int v8; 
  int LoggerInfoFromContext; 
  __int64 v10; 
  unsigned int v11; 
  int v12; 
  _UNICODE_STRING *v13; 
  NTSTATUS v14; 
  __int64 v15; 
  _UNICODE_STRING v16; 
  int v17; 
  _PERFINFO_GROUPMASK *v18; 
  unsigned int v19; 
  _UNICODE_STRING UnicodeString; 
  INT64 v21; 
  INT64 v22; 

  v22 = 0i64;
  UnicodeString = 0i64;
  result = EtwpValidateLoggerInfo(LoggerInfo);
  if( result >= 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    EtwpAcquireLoggerContext(
      (INT64)SiloState,
      v5,
      (INT64)&v22,
      v6,
      *(_MEMORY_CACHING_TYPE_ORIG **)&UnicodeString.Length,
      (INT64)UnicodeString.Buffer,
      v21);
    LoggerInfoFromContext = v8;
    if( v8 < 0 )
    {
LABEL_15:
      RtlFreeAnsiString(&UnicodeString);
      KeLeaveCriticalRegionThread(KeGetCurrentThread());
      return LoggerInfoFromContext;
    }
    v10 = v22;
    if( (*(_DWORD *)(v22 + 12) & 0x40000) != 0 )
    {
      LoggerInfoFromContext = -1073741637;
    }
    else
    {
      v11 = ((*(_DWORD *)(v22 + 12) & 0x100 | 0x400u) >> 3) | 0x40;
      if( !*(_QWORD *)(v22 + 816) )
        v11 = (*(_DWORD *)(v22 + 12) & 0x100 | 0x400u) >> 3;
      v12 = *(_DWORD *)(v22 + 12) & 0x400;
      if( v12 )
      {
        if( !*((_QWORD *)LoggerInfo + 17) || (v13 = (_UNICODE_STRING *)(LoggerInfo + 32), !*((_WORD *)LoggerInfo + 64)) )
        {
          LoggerInfoFromContext = -1073741809;
          goto LABEL_14;
        }
        v11 |= 0x40u;
      }
      else
      {
        v13 = (_UNICODE_STRING *)(LoggerInfo + 32);
      }
      LoggerInfoFromContext = EtwpCheckLoggerControlAccess(v11, (_WMI_LOGGER_CONTEXT *)v22);
      if( LoggerInfoFromContext >= 0 )
      {
        if( !v12 )
        {
          v14 = EtwpSynchronizeWithLogger((_WMI_LOGGER_CONTEXT *)v10, 4ui64);
LABEL_11:
          LoggerInfoFromContext = v14;
          if( v14 >= 0 )
          {
            LoggerInfoFromContext = EtwpGetLoggerInfoFromContext(LoggerInfo, (_WMI_LOGGER_CONTEXT *)v10);
            if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_FLUSH_TRACE) )
              EtwpEventWriteTemplateSession(v15, &ETW_EVENT_FLUSH_TRACE, v10);
          }
          goto LABEL_14;
        }
        LoggerInfoFromContext = EtwpCaptureString(v13, &UnicodeString);
        if( LoggerInfoFromContext >= 0 )
        {
          v16 = UnicodeString;
          UnicodeString.Buffer = 0i64;
          *(_UNICODE_STRING *)(v10 + 200) = v16;
          _InterlockedOr((volatile signed __int32 *)(v10 + 836), 1u);
          v17 = *(_DWORD *)(v10 + 12);
          v10 = v22;
          if( (v17 & 0x2000000) != 0 )
          {
            v18 = &SiloState->SystemLoggerSettings.EtwpGroupMasks[*(unsigned __int8 *)(v22 + 834)];
            if( v18 )
            {
              v19 = v18->Masks[1];
              if( (v19 & 4) != 0 && (v19 & 0x100) != 0 )
                EtwpCCSwapStop(*(unsigned int *)(v22 + 216), 0);
            }
          }
          v14 = EtwpBufferingModeFlush((_WMI_LOGGER_CONTEXT *)v10);
          goto LABEL_11;
        }
      }
    }
LABEL_14:
    EtwpReleaseLoggerContext((_WMI_LOGGER_CONTEXT *)v10, 1u);
    goto LABEL_15;
  }
  return result;
}

Referenced by:

No references.