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