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