EtwpStackTraceDispatcher

VOID __stdcall EtwpStackTraceDispatcher(
        UINT64 LoggerId,
        _LARGE_INTEGER *RelatedTimeStamp,
        _ETHREAD *Thread,
        UINT64 Flags,
        UINT64 Flagsa){
  _ETHREAD *CurrentThread; 
  unsigned int v6; 
  _ETHREAD *v7; 
  UINT8 CurrentIrql; 
  UINT8 v11; 
  UINT8 v12; 
  unsigned __int8 NestingLevel; 
  int v14; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v6 = Flags;
  v7 = Thread;
  if( (Flags & 0x4000) == 0 || KeGetCurrentPrcb()->IdleThread != CurrentThread )
  {
    if( !Thread )
      v7 = CurrentThread;
    if( (Flags & 0x3000) != 4096 )
      goto LABEL_29;
    if( (CurrentThread->Tcb._bf_0 & 0x400) != 0
      || CurrentThread != v7
      || (CurrentThread->CrossThreadFlags & 1) != 0 && (Flags & 0x4000000) == 0 )
    {
      v6 = Flags & 0xFFFFEFFF;
      goto LABEL_29;
    }
    CurrentIrql = ObGetCurrentIrql();
    v11 = 2;
    v12 = CurrentIrql;
    if( CurrentIrql < 2u )
    {
      if( (*(_DWORD *)(LoggerId + 832) & 0x1000000) == 0 || (CurrentThread->CrossThreadFlags & 1) != 0 )
      {
        MmCanThreadFault();
        if( v14 )
        {
          if( !CurrentThread->ActiveFaultCount
            && KeGetCurrentThread()->ApcStateIndex != 1
            && (v6 & 0x1000000) == 0
            && !_bittest((const signed __int32 *)&CurrentThread->Tcb.116, 5u) )
          {
            goto LABEL_29;
          }
        }
      }
      v6 &= ~0x1000u;
    }
    else
    {
      v6 &= ~0x1000u;
      NestingLevel = KeGetCurrentPrcb()->NestingLevel;
      if( CurrentIrql == 2 )
      {
        if( !NestingLevel )
          goto LABEL_28;
        goto LABEL_16;
      }
      if( NestingLevel )
      {
LABEL_16:
        if( (v6 & 0x8000) == 0 || NestingLevel != 1 )
          goto LABEL_29;
      }
    }
    v11 = v12;
LABEL_28:
    EtwpQueueStackWalkApc(CurrentThread, v11, LoggerId, RelatedTimeStamp);
LABEL_29:
    if( (v6 & 0x1800) != 0 )
      EtwpTraceStackWalk(LoggerId, v6, v7, RelatedTimeStamp);
  }
}

Referenced by:

EtwpLogContextSwapEvent
EtwpLogKernelEvent
EtwpLogSystemEventUnsafe