PopFxTracePerfRegistration
VOID __stdcall PopFxTracePerfRegistration(_POP_FX_PERF_INFO *FxPerf, UINT8 Rundown){
const _EVENT_DESCRIPTOR *v4;
const _EVENT_DESCRIPTOR *v5;
unsigned int v6;
unsigned int v7;
__int64 v8;
__int64 v9;
size_t v10;
VOID **PoolWithTag;
unsigned int i;
__int64 v13;
__int64 v14;
__int64 v15;
int v16;
unsigned int v17;
__int64 j;
__int64 v19;
__int64 v20;
__int64 v21;
if( Rundown )
{
v4 = &POP_ETW_EVENT_PERFORMANCE_STATE_REGISTRATION_RUNDOWN;
}
else
{
v4 = (const _EVENT_DESCRIPTOR *)POP_ETW_EVENT_PERFORMANCE_STATE_REGISTRATION;
PopFxAddLogEntry(
*(_QWORD *)(*(_QWORD *)(*(_QWORD *)FxPerf + 80i64) + 48i64),
*(_DWORD *)(*(_QWORD *)FxPerf + 16i64),
12,
*((unsigned int *)FxPerf + 36));
}
if( PopDiagHandleRegistered && EtwEventEnabled(PopDiagHandle, v4) )
{
PopDiagTraceFxPerfRegistration(
v4,
*(_QWORD *)(*(_QWORD *)(*(_QWORD *)FxPerf + 80i64) + 48i64),
*(unsigned int *)(*(_QWORD *)FxPerf + 16i64),
*((unsigned int *)FxPerf + 36));
v5 = (const _EVENT_DESCRIPTOR *)POP_ETW_EVENT_PERFORMANCE_STATE_SET_REGISTRATION_RUNDOWN;
if( !Rundown )
v5 = &POP_ETW_EVENT_PERFORMANCE_STATE_SET_REGISTRATION;
if( EtwEventEnabled(PopDiagHandle, v5) )
{
v6 = *((_DWORD *)FxPerf + 36);
v7 = 0;
if( v6 )
{
v8 = *((_QWORD *)FxPerf + 19);
v9 = v6;
do
{
if( !*(_DWORD *)(*(_QWORD *)v8 + 28i64) && *(_DWORD *)(*(_QWORD *)v8 + 32i64) > v7 )
v7 = *(_DWORD *)(*(_QWORD *)v8 + 32i64);
v8 += 32i64;
--v9;
}
while( v9 );
}
v10 = 0;
if( v7 )
{
if( 8 * (unsigned __int64)v7 > 0xFFFFFFFF )
return;
v10 = 8 * v7;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 8 * v7, 1297630800i64);
if( !PoolWithTag )
return;
}
else
{
PoolWithTag = 0i64;
}
for( i = 0; i < *((_DWORD *)FxPerf + 36); ++i )
{
v13 = *((_QWORD *)FxPerf + 19);
v14 = 32i64 * i;
v15 = *(_QWORD *)(v14 + v13);
v16 = *(_DWORD *)(v15 + 28);
if( v16 )
{
v19 = *(_QWORD *)(v15 + 32);
v17 = 0;
v20 = *(_QWORD *)(v15 + 40);
v21 = 0i64;
}
else
{
memset(PoolWithTag, 0i64, v10);
v17 = *(_DWORD *)(v15 + 32);
for( j = 0i64; (unsigned int)j < v17; v17 = *(_DWORD *)(v15 + 32) )
{
PoolWithTag[j] = *(VOID **)(*(_QWORD *)(v15 + 40) + 16i64 * (unsigned int)j);
j = (unsigned int)(j + 1);
}
v13 = *((_QWORD *)FxPerf + 19);
LOBYTE(v19) = 0;
v16 = *(_DWORD *)(v15 + 28);
LOBYTE(v20) = 0;
v21 = (__int64)PoolWithTag;
}
PopDiagTraceFxPerfSetRegistration(
v5,
*(_QWORD *)(*(_QWORD *)(*(_QWORD *)FxPerf + 80i64) + 48i64),
*(_DWORD *)(*(_QWORD *)FxPerf + 16i64),
i,
v16,
*(_DWORD *)(v15 + 24),
v19,
v20,
v15,
v17,
v21,
*(_QWORD *)(v14 + v13 + 8));
}
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0x4D584650u);
}
}
}Referenced by:
PopFxRegisterComponentPerfStates
PopFxTraceDeviceRegistration