EtwpApplyEventNameFilter
char __fastcall EtwpApplyEventNameFilter(
__int64 a1,
unsigned int a2,
unsigned int a3,
unsigned __int64 a4,
char a5,
unsigned __int8 a6,
unsigned __int8 a7,
__int64 a8,
char a9){
__int64 v9;
VOID **v11;
unsigned __int8 CurrentIrql;
__int64 v13;
unsigned int v14;
unsigned __int64 v15;
size_t v16;
char *v17;
unsigned __int64 v18;
signed __int64 v19;
void *v20;
void *v21;
__int64 v22;
__int64 v23;
_BYTE *v24;
__int64 v25;
__int64 v26;
unsigned __int8 v27;
UINT8 *EventNameFromEventMetadata;
bool v29;
bool v31;
char v32;
UINT16 NameLength;
PSTR UserDataBlob;
unsigned int v35;
VOID **v36;
VOID *Src[2];
v9 = a2;
NameLength = 0;
UserDataBlob = 0i64;
*(_OWORD *)Src = 0i64;
v11 = 0i64;
v36 = 0i64;
CurrentIrql = 0;
v32 = 0;
v31 = 1;
if( a5 )
{
v13 = 16i64 * a3;
if( v13 )
{
if( (a4 & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( v13 + a4 > 0x7FFFFFFF0000i64 || v13 + a4 < a4 )
MEMORY[0x7FFFFFFF0000] = 0;
}
}
v14 = 0;
v35 = 0;
while( v14 < a3 )
{
v15 = a4 + 16i64 * v14;
if( *(_BYTE *)(v15 + 12) == 1 )
{
if( a6 >= 2u )
{
v11 = (VOID **)(a4 + 16i64 * v14);
v36 = v11;
UserDataBlob = *(PSTR *)v15;
}
else
{
*(_OWORD *)Src = *(_OWORD *)v15;
v11 = Src;
v36 = Src;
v16 = _mm_cvtsi128_si32(_mm_srli_si128(*(__m128i *)Src, 8));
if( v16 >= 0xFFFF )
{
v31 = 0;
goto LABEL_61;
}
if( a5 )
{
if( v16 )
{
v17 = (char *)Src[0] + v16;
if( (unsigned __int64)v17 > 0x7FFFFFFF0000i64 || v17 < Src[0] )
{
MEMORY[0x7FFFFFFF0000] = 0;
v16 = (size_t)Src[1];
}
}
}
if( v16 <= 0x100 )
{
v18 = v16 + 15i64;
if( v18 <= v16 )
v18 = 0xFFFFFFFFFFFFFF0i64;
v19 = v18 & 0xFFFFFFFFFFFFFFF0ui64;
v20 = alloca(v19);
v21 = alloca(v19);
UserDataBlob = (PSTR)&v31;
}
else
{
UserDataBlob = (PSTR)ExAllocatePoolWithTag(0x200ui64, v16, 1953985605i64);
if( !UserDataBlob )
{
v31 = 1;
goto LABEL_61;
}
v32 = 1;
v16 = (size_t)Src[1];
}
memmove(UserDataBlob, Src[0], v16);
}
break;
}
v35 = ++v14;
}
if( !v11 || !UserDataBlob )
goto LABEL_54;
if( a6 < 2u )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
}
v22 = *(_QWORD *)(a1 + 384);
if( v22 )
{
v23 = 104 * v9;
v24 = a9 ? *(_BYTE **)(v22 + v23 + 56) : *(_BYTE **)(v22 + v23 + 96);
if( v24 )
{
v25 = 0i64;
v26 = *(_QWORD *)(a1 + 384);
if( v26 )
{
if( a9 )
{
if( (*(_DWORD *)(v26 + 104 * v9) & 0x80002000) == -2147475456 )
v25 = *(_QWORD *)(v26 + v23 + 56);
}
else if( (*(_DWORD *)(v26 + 104 * v9) & 0x80000400) == -2147482624 )
{
v25 = *(_QWORD *)(v26 + v23 + 96);
}
if( v25 )
{
v27 = *(_BYTE *)(v25 + 1);
if( (a7 <= v27 || !v27)
&& (!a8 || (a8 & *(_QWORD *)(v25 + 8)) != 0 && (a8 & *(_QWORD *)(v25 + 16)) == *(_QWORD *)(v25 + 16)) )
{
EventNameFromEventMetadata = (UINT8 *)EtwpGetEventNameFromEventMetadata(
UserDataBlob,
*((unsigned int *)v36 + 2),
&NameLength);
if( !EventNameFromEventMetadata )
{
if( a6 < 2u )
__writecr8(CurrentIrql);
LABEL_54:
v31 = 1;
goto LABEL_61;
}
if( NameLength )
v29 = *v24 == EtwpEventNameFilterSearch(EventNameFromEventMetadata, NameLength, (INT64)v24);
else
v29 = *v24 == 0;
v31 = v29;
}
}
}
}
}
if( a6 < 2u )
__writecr8(CurrentIrql);
LABEL_61:
if( v32 )
ExFreePoolWithTag(UserDataBlob, 0);
return v31;
}Referenced by:
EtwpEventWriteFull
EtwpWriteUserEvent