EtwpEventNameFilterSearch

UINT8 __stdcall EtwpEventNameFilterSearch(UINT8 *EventName, UINT16 NameLength, INT64 EventNameFilter){
  __int64 v3; 
  UINT8 *v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  int v14; 
  int v15; 
  unsigned int v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v21; 

  v3 = NameLength;
  v5 = EventName;
  v6 = 314159i64;
  if( NameLength >= 8ui64 )
  {
    v7 = (unsigned __int64)NameLength >> 3;
    v3 = NameLength - 8 * v7;
    do
    {
      v8 = v5[6] + 37 * (v5[5] + 37 * (v5[4] + 37 * (v5[3] + 37 * (v5[2] + 37 * (v5[1] + 37 * (*v5 + 37 * v6))))));
      v9 = v5[7];
      v5 += 8;
      v6 = v9 + 37 * v8;
      --v7;
    }
    while( v7 );
  }
  if( v3 >= 1 && v3 <= 7 )
  {
    v10 = v3 - 1;
    if( v10 )
    {
      v11 = v10 - 1;
      if( v11 )
      {
        v12 = v11 - 1;
        if( v12 )
        {
          v13 = v12 - 1;
          if( v13 )
          {
            v14 = v13 - 1;
            if( v14 )
            {
              v15 = v14 - 1;
              if( v15 )
              {
                if( v15 != 1 )
                  goto LABEL_20;
                v6 = *v5++ + 37 * v6;
              }
              v6 = *v5++ + 37 * v6;
            }
            v6 = *v5++ + 37 * v6;
          }
          v6 = *v5++ + 37 * v6;
        }
        v6 = *v5++ + 37 * v6;
      }
      v6 = *v5++ + 37 * v6;
    }
    v6 = *v5 + 37 * v6;
  }
LABEL_20:
  v16 = *(_DWORD *)(EventNameFilter + 28);
  v17 = -1i64 << (*(_BYTE *)(EventNameFilter + 28) & 0x1F);
  v18 = v17 & v6;
  if( v16 >> 5 )
  {
    v21 = v17 & v6;
    v19 = *(_QWORD *)(EventNameFilter + 32)
        + 8i64
        * ((37
          * (BYTE6(v21)
           + 37
           * (BYTE5(v21)
            + 37
            * (BYTE4(v21)
             + 37 * (BYTE3(v21) + 37 * (BYTE2(v21) + 37 * (BYTE1(v21) + 37 * ((unsigned __int8)v18 + 11623883)))))))
          + HIBYTE(v21)) & ((v16 >> 5) - 1));
    do
    {
      v19 = *(_QWORD *)v19;
      if( (v19 & 1) != 0 )
        goto LABEL_29;
    }
    while( v18 != (v17 & *(_QWORD *)(v19 + 8)) );
LABEL_30:
    while( v19 )
    {
      if( !strcmp((const char *)EventName, *(const char **)(v19 + 16)) )
        return 1;
      while( 1 )
      {
        v19 = *(_QWORD *)v19;
        if( (v19 & 1) != 0 )
          break;
        if( (v6 & (-1i64 << (v16 & 0x1F))) == ((-1i64 << (v16 & 0x1F)) & *(_QWORD *)(v19 + 8)) )
          goto LABEL_30;
      }
LABEL_29:
      v19 = 0i64;
    }
  }
  return 0;
}

Referenced by:

EtwpApplyEventNameFilter