EtwpApplyEventIdPayloadFilter
CHAR __fastcall EtwpApplyEventIdPayloadFilter(
INT64 a1,
UINT64 a2,
INT16 a3,
INT64 a4,
INT16 a5,
UINT64 DataSegCount,
UINT64 DataSegsIn,
CHAR a8,
UINT8 a9){
__int64 v9;
INT64 v12;
unsigned __int8 CurrentIrql;
__int64 v14;
INT64 v15;
CHAR v16;
_BYTE *v17;
__int64 v19;
INT64 v20;
CHAR v21;
_BYTE *v22;
int v23;
CHAR v24;
char WriteEventPtr[24];
v9 = 0i64;
WriteEventPtr[0] = 1;
v12 = a1;
if( a9 >= 2u )
{
v19 = 104i64 * (unsigned int)a2;
v20 = *(_QWORD *)(*(_QWORD *)(a1 + 384) + v19 + 72);
if( v20 )
{
v21 = EtwpPerfectHashFunctionSearch(a5, v20);
if( *v22 != v21 )
return 0;
}
v9 = *(_QWORD *)(*(_QWORD *)(v12 + 384) + v19 + 80);
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v14 = 104i64 * (unsigned int)a2;
v15 = *(_QWORD *)(*(_QWORD *)(a1 + 384) + v14 + 72);
if( !v15 || (v16 = EtwpPerfectHashFunctionSearch(a5, v15), *v17 == v16) )
{
v9 = *(_QWORD *)(*(_QWORD *)(v12 + 384) + v14 + 80);
if( v9 )
_InterlockedIncrement((volatile signed __int32 *)v9);
}
else
{
WriteEventPtr[0] = 0;
}
__writecr8(CurrentIrql);
}
if( !v9 )
return WriteEventPtr[0];
v23 = EtwpApplyPayloadFilterInternal(
(const _EVENT_DESCRIPTOR *)a4,
(unsigned int)DataSegCount,
(_EVENT_DATA_DESCRIPTOR *)DataSegsIn,
(unsigned __int8)a8,
a3 == 0,
(_AGGREGATED_PAYLOAD_FILTER *)(v9 + 8),
(UINT8 *)WriteEventPtr);
v24 = WriteEventPtr[0];
if( v23 < 0 )
v24 = 1;
WriteEventPtr[0] = v24;
if( a9 < 2u )
{
if( _InterlockedExchangeAdd((volatile signed __int32 *)v9, 0xFFFFFFFF) == 1 )
ExFreePoolWithTag((PVOID)v9, 0);
return WriteEventPtr[0];
}
return v24;
}Referenced by:
EtwpApplyEventIdPayloadFilterOnUserEvent
EtwpEventWriteFull