EtwpApplyEventIdPayloadFilter
char __fastcall EtwpApplyEventIdPayloadFilter(
__int64 a1,
unsigned int a2,
__int16 a3,
__int64 a4,
__int16 a5,
unsigned int a6,
unsigned __int64 a7,
char a8,
unsigned __int8 a9){
volatile signed __int32 *v9;
__int64 v12;
unsigned __int8 CurrentIrql;
__int64 v14;
_BYTE *v15;
char v16;
__int64 v18;
_BYTE *v19;
char v20;
int v21;
char v22;
char v23[24];
v9 = 0i64;
v23[0] = 1;
v12 = a1;
if( a9 >= 2u )
{
v18 = 104i64 * a2;
if( *(_QWORD *)(*(_QWORD *)(a1 + 384) + v18 + 72) )
{
EtwpPerfectHashFunctionSearch();
if( *v19 != v20 )
return 0;
}
v9 = *(volatile signed __int32 **)(*(_QWORD *)(v12 + 384) + v18 + 80);
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v14 = 104i64 * a2;
if( !*(_QWORD *)(*(_QWORD *)(a1 + 384) + v14 + 72) || (EtwpPerfectHashFunctionSearch(), *v15 == v16) )
{
v9 = *(volatile signed __int32 **)(*(_QWORD *)(v12 + 384) + v14 + 80);
if( v9 )
_InterlockedIncrement(v9);
}
else
{
v23[0] = 0;
}
__writecr8(CurrentIrql);
}
if( !v9 )
return v23[0];
v21 = EtwpApplyPayloadFilterInternal(a4, a6, a7, a8, a3 == 0, (__int64)(v9 + 2), v23);
v22 = v23[0];
if( v21 < 0 )
v22 = 1;
v23[0] = v22;
if( a9 < 2u )
{
if( _InterlockedExchangeAdd(v9, 0xFFFFFFFF) == 1 )
ExFreePoolWithTag((PVOID)v9, 0);
return v23[0];
}
return v22;
}Referenced by:
EtwpApplyEventIdPayloadFilterOnUserEvent
EtwpEventWriteFull