EtwpKernelTraceRundown

VOID __fastcall EtwpKernelTraceRundown(_PERFINFO_GROUPMASK *GroupMasks, UINT64 LoggerId, UINT8 Start){
  UINT8 v3; 
  UINT8 v5; 
  unsigned int v6; 
  UINT8 v8; 
  INT64 v9; 
  UINT8 v10; 
  UINT64 v11; 
  unsigned int v12; 
  int v13; 
  unsigned int v14; 
  unsigned int v15; 
  unsigned int v16; 
  char a3[56]; 
  unsigned int v18; 
  v18 = Start;
  v5 = v3;
  a3[0] = 0;
  v6 = Start;
  v8 = IoSetThreadHardErrorMode(0);
  v9 = EtwpOpenLogger(v6, LoggerId, 0, a3);
  v11 = v9;
  if( v9 )
  {
    if( GroupMasks )
    {
      if( (GroupMasks->Masks[1] & 0x20) != 0 && !v5 )
        EtwpLogRefSetAutoMark(0, v9);
      v12 = GroupMasks->Masks[0];
      if( (GroupMasks->Masks[0] & 0xC004) != 0
        || (GroupMasks->Masks[4] & 0x40) != 0
        || (v12 & 1) != 0
        || (v12 & 2) != 0
        || (GroupMasks->Masks[1] & 0x8000000) != 0 )
      {
        EtwpProcessThreadImageRundown(GroupMasks, v11, v5);
        v12 = GroupMasks->Masks[0];
      }
      v13 = v12 & 0x20000;
      if( v13 || (GroupMasks->Masks[2] & 0x1000000) != 0 )
        CmEtwRunDown(LoggerId, v6, v13 != 0, HIBYTE(GroupMasks->Masks[2]) & 1);
      v14 = GroupMasks->Masks[1];
      if( (v14 & 2) != 0 )
      {
        EtwpSampledProfileRunDown(v11, v5, 1u);
        v14 = GroupMasks->Masks[1];
      }
      if( (v14 & 0x400) != 0 )
      {
        EtwpSampledProfileRunDown(v11, v5, 0);
        v14 = GroupMasks->Masks[1];
      }
      if( (v14 & 0x10000) != 0 )
      {
        EtwpSpinLockConfigRunDown(v11, v5);
        v14 = GroupMasks->Masks[1];
      }
      if( (v14 & 0x20000) != 0 )
      {
        EtwpExecutiveResourceConfigRunDown(v11, v5);
        v14 = GroupMasks->Masks[1];
      }
      if( (v14 & 0x400008) != 0 )
      {
        MmPerfLogSessionRundown(LoggerId, v6);
        v14 = GroupMasks->Masks[1];
      }
      if( (v14 & 0x8000049) != 0 )
        EtwpPoolRunDown(v11, v5);
      if( (GroupMasks->Masks[2] & 0x100000) != 0 )
        EtwpClockSourceRunDown(v11, v5);
      v15 = GroupMasks->Masks[1];
      if( v5 )
      {
        if( (v15 & 0x8000000) != 0 )
        {
          MmIdentifyPhysicalMemory(LoggerId, v6, 0x285ui64);
          MmLogSystemShareablePfnInfo(LoggerId, (PVOID)v6);
          v15 = GroupMasks->Masks[1];
        }
        if( (v15 & 0x20) != 0 )
          EtwpLogRefSetAutoMark(v5, v11);
      }
      else
      {
        if( (v15 & 0x8000000) != 0 )
        {
          MmLogSystemShareablePfnInfo(LoggerId, (PVOID)v6);
          MmIdentifyPhysicalMemory(LoggerId, v6, 0x285ui64);
          v15 = GroupMasks->Masks[1];
        }
        if( (v15 & 9) != 0 )
        {
          EtwpLogMemInfoRundown(v11);
          MmIdentifyPhysicalMemory(LoggerId, v6, 0x223ui64);
          v15 = GroupMasks->Masks[1];
        }
        if( (v15 & 0x80000) != 0 )
        {
          MmLogQueryCombineStats(LoggerId, (int *)&v18, 0i64);
          v6 = v18;
        }
        if( (GroupMasks->Masks[0] & 0x200) != 0 )
          WmiTraceRundownNotify(**(_QWORD **)(v11 + 1080), v6);
        v16 = GroupMasks->Masks[4];
        if( (v16 & 0x8000) != 0 )
        {
          PopExecuteOnTargetProcessors((INT64)&KeActiveProcessors, (INT64)PpmTracePerfIdleRundown, 0i64, 0i64);
          v16 = GroupMasks->Masks[4];
        }
        if( (v16 & 0x40) != 0 || (v16 & 0x80u) != 0 )
          EtwpObjectTypeRundown(v11, 0);
        if( (GroupMasks->Masks[2] & 0x10000) != 0 )
          EtwpProcessorRundown(v11, v10);
      }
    }
    EtwpCloseLogger(v6, LoggerId, a3[0]);
  }
  IoSetThreadHardErrorMode(v8);
}

Referenced by:

EtwKernelMemoryRundown
EtwpLogKernelTraceRundown
EtwpUpdateGroupMasks