PpmEventTraceProcessorPerformanceDomainRundown
VOID __fastcall PpmEventTraceProcessorPerformanceDomainRundown(INT64 a1, INT64 a2, EVENT_DESCRIPTOR *a3){
_DWORD *PoolWithTag;
unsigned __int16 v5;
USHORT i;
_GROUP_AFFINITY *v7;
bool v8;
unsigned int v9;
_OWORD *v10;
__int64 v11;
__int64 v12;
__int64 v13;
unsigned int v14;
unsigned __int16 v15;
__int64 v16;
__int64 v17;
unsigned int v18;
__int64 v19;
unsigned int v20;
unsigned __int16 j;
__int64 v22;
__int64 v23;
__int64 v24;
__int64 v25;
unsigned int v26;
unsigned __int16 v27;
int v28;
EVENT_DATA_DESCRIPTOR UserData[42];
_OWORD v30[20];
PoolWithTag = 0i64;
if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, (EVENT_DESCRIPTOR *)&PPM_ETW_PERF_DOMAIN_RUNDOWN, a3) )
{
v5 = 0;
v27 = 0;
for( i = 0; i < 0x14u; ++i )
{
v7 = (_GROUP_AFFINITY *)&v30[v5];
*v7 = 0i64;
v7->Group = i;
v7->Mask = KeQueryGroupAffinity(i);
v8 = (unsigned int)KeAndGroupAffinityEx((_KAFFINITY_EX *)(a1 + 24), v7, v7) == 0;
v5 = v27;
if( !v8 )
v5 = ++v27;
}
UserData[0].Ptr = (unsigned __int64)&v27;
v9 = 1;
*(_QWORD *)&UserData[0].Size = 2i64;
if( v5 )
{
v10 = v30;
v11 = v5;
do
{
v12 = v9;
UserData[v12].Ptr = (unsigned __int64)v10 + 8;
*(_QWORD *)&UserData[v12].Size = 2i64;
v13 = v9 + 1;
v9 += 2;
UserData[v13].Ptr = (unsigned __int64)v10++;
*(_QWORD *)&UserData[v13].Size = 8i64;
--v11;
}
while( v11 );
}
v14 = *(_DWORD *)(a1 + 200);
v15 = 0;
v16 = v9;
v17 = 0i64;
v18 = v9 + 1;
v28 = 0;
UserData[v16].Ptr = (unsigned __int64)&v28;
*(_QWORD *)&UserData[v16].Size = 4i64;
if( v14 )
{
v19 = *(_QWORD *)(a1 + 216);
do
{
if( *(_DWORD *)(136i64 * v15 + v19 + 16) == 1 )
{
v17 = (unsigned int)(v17 + 1);
v28 = v17;
}
++v15;
}
while( v15 < v14 );
if( (_DWORD)v17 )
{
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 4 * v17, 0x654D5050ui64);
if( !PoolWithTag )
return;
v20 = 0;
for( j = 0; (unsigned int)j < *(_DWORD *)(a1 + 200); ++j )
{
v22 = *(_QWORD *)(a1 + 216);
v23 = 136i64 * j;
if( *(_DWORD *)(v23 + v22 + 16) == 1 )
{
v24 = v20++;
PoolWithTag[v24] = *(_DWORD *)(v23 + v22 + 20);
}
}
v25 = v18;
v26 = 4 * v28;
++v18;
UserData[v25].Ptr = (unsigned __int64)PoolWithTag;
UserData[v25].Size = v26;
UserData[v25].Reserved = 0;
}
}
EtwWrite(PpmEtwHandle, (EVENT_DESCRIPTOR *)&PPM_ETW_PERF_DOMAIN_RUNDOWN, 0i64, v18, UserData);
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0x654D5050u);
}
}Referenced by:
PpmEventTraceControlCallback