EtwpSetProviderTraitsUm

NTSTATUS __fastcall EtwpSetProviderTraitsUm(_ETW_REG_ENTRY *RegEntry, _ETW_PROVIDER_TRAITS *Traits, _FAST_MUTEX *Mutex){
  unsigned int v4; 
  _RTL_RB_TREE *v6; 
  _LIST_ENTRY *Flink; 
  int v8; 
  __int16 v9; 
  __int64 Flink_low; 
  _LIST_ENTRY *Blink; 
  VOID **PoolWithTag; 
  int v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v18; 
  _RTL_RB_TREE *Tree; 
  _RTL_RB_TREE *v20; 

  v4 = (unsigned int)Traits;
  v6 = 0i64;
  if( !RegEntry->RegList.Blink || !LOWORD(RegEntry->GroupRegList.Flink) )
    goto LABEL_15;
  Flink = RegEntry->RegList.Flink;
  Tree = 0i64;
  v8 = ObReferenceObjectByHandle(Flink, 0x800ui64, EtwpRegistrationObjectType, 1, (VOID **)&Tree, 0i64);
  v6 = Tree;
  v20 = Tree;
  if( v8 < 0 )
    goto LABEL_16;
  v9 = WORD1(Tree[6].Root);
  if( (v9 & 8) == 0 && (v9 & 2) != 0 )
  {
    if( Tree[6].Min )
    {
      v8 = -1073741823;
    }
    else
    {
      Flink_low = LOWORD(RegEntry->GroupRegList.Flink);
      if( (_WORD)Flink_low )
      {
        Blink = RegEntry->RegList.Blink;
        if( (unsigned __int64)Blink + Flink_low > 0x7FFFFFFF0000i64
          || (_LIST_ENTRY *)((char *)Blink + Flink_low) < Blink )
        {
          MEMORY[0x7FFFFFFF0000] = 0;
          LOWORD(Flink_low) = RegEntry->GroupRegList.Flink;
        }
      }
      PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned __int16)Flink_low + 28i64, 1417114693i64);
      v13 = HIDWORD(PoolWithTag);
      if( PoolWithTag )
      {
        memmove((char *)PoolWithTag + 28, RegEntry->RegList.Blink, LOWORD(RegEntry->GroupRegList.Flink));
        HIDWORD(v18) = v13;
        v8 = EtwpSetProviderTraitsCommon(RegEntry, (_ETW_PROVIDER_TRAITS *)v4, Mutex, v6);
      }
      else
      {
        v8 = -1073741670;
      }
    }
  }
  else
  {
LABEL_15:
    v8 = -1073741811;
  }
LABEL_16:
  if( v6 )
  {
    if( v8 && EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_SET_TRAITS_FAILED) )
    {
      LODWORD(v18) = v8;
      EtwpEventWriteRegistrationStatus(v15, v14, v16, (__int64)v6, v18);
    }
    HalPutDmaAdapter((PADAPTER_OBJECT)v6);
  }
  return v8;
}

Referenced by:

NtTraceControl