EtwpGetStackExtendedHeaderItem

VOID __stdcall EtwpGetStackExtendedHeaderItem(
        _ETHREAD *CurrentThread,
        UINT64 Flags,
        UINT64 FrameCount,
        _ETWP_HEADER_EXTENDED_DATA_ITEM **StackExtendedHeaderItem,
        UINT8 CaptureKernelStack,
        UINT64 *RelatedMatchId){
  __int64 v6; 
  _ETWP_HEADER_EXTENDED_DATA_ITEM *v7; 
  __int16 v8; 
  UINT64 v9; 
  int v11; 
  char v12; 
  unsigned int v14; 
  UINT8 CurrentIrql; 
  int v16; 
  __int16 v17; 
  unsigned __int16 v18; 

  v6 = 0i64;
  v7 = *StackExtendedHeaderItem + 2;
  v8 = 0;
  v9 = 0i64;
  v11 = FrameCount;
  v12 = Flags;
  if( CaptureKernelStack )
  {
    v14 = RtlWalkFrameChain((INT64)&(*StackExtendedHeaderItem)[2], (unsigned int)FrameCount, 0x300ui64);
    if( v14 > 3 )
      v6 = v14 - 3;
    else
      v6 = 0i64;
  }
  if( (CurrentThread->Tcb._bf_0 & 0x400) == 0 && (CurrentThread->CrossThreadFlags & 1) == 0 )
  {
    CurrentIrql = ObGetCurrentIrql();
    if( CurrentIrql == 2 )
    {
      if( !KeGetCurrentPrcb()->NestingLevel )
LABEL_15:
        v9 = _InterlockedIncrement64(&EtwpStackMatchId);
    }
    else if( CurrentIrql < 2u )
    {
      if( CurrentThread->ActiveFaultCount )
        goto LABEL_15;
      if( KeGetCurrentThread()->ApcStateIndex == 1 )
        goto LABEL_15;
      v16 = v12 & 1;
      if( v16 )
      {
        if( KeGetCurrentThread()->WaitBlock[3].SpareLong )
          goto LABEL_15;
      }
      if( !v16 )
      {
        v8 = RtlWalkFrameChain((INT64)&v7[v6], (unsigned int)(v11 - v6), 1ui64);
        if( RelatedMatchId )
          v9 = *RelatedMatchId;
      }
    }
  }
  v17 = v8 + v6;
  if( v17 || v9 )
  {
    v18 = 8 * (v17 + 1);
    (*StackExtendedHeaderItem)[1] = (_ETWP_HEADER_EXTENDED_DATA_ITEM)v9;
    (*StackExtendedHeaderItem)->Size = v18 + 8;
    (*StackExtendedHeaderItem)->ExtType = 6;
    (*StackExtendedHeaderItem)->DataSize = v18;
    (*StackExtendedHeaderItem)->_bf_4 &= ~1u;
    (*StackExtendedHeaderItem)->_bf_4 &= 1u;
  }
  else
  {
    if( v11 == 256 )
      RtlpInterlockedPushEntrySList(&xmmword_140C53A90, (PSLIST_ENTRY)&(*StackExtendedHeaderItem)[-2]);
    *StackExtendedHeaderItem = 0i64;
  }
}

Referenced by:

EtwpEventWriteFull
EtwpWriteUserEvent