PpmEventDomainPerfStateChange
VOID __stdcall PpmEventDomainPerfStateChange(_PROC_PERF_DOMAIN *Domain){
unsigned __int64 v2;
_PROC_PERF_CHECK_CONTEXT *Master;
unsigned __int16 v4;
unsigned __int16 v5;
_GROUP_AFFINITY *v6;
bool v7;
unsigned __int64 v8;
int v9;
bool v10;
unsigned int v11;
_OWORD *v12;
__int64 v13;
__int64 v14;
__int64 v15;
__int64 v16;
__int64 v17;
unsigned int v18;
__int64 v19;
__int64 v20;
int Autonomous;
__int64 v22;
REGHANDLE v23;
int v24;
int SelectedState;
unsigned int SelectedFrequency;
int v27;
int DataPtr[2];
__int64 v29;
unsigned __int64 v30;
_EVENT_DATA_DESCRIPTOR UserData;
unsigned int *p_SelectedFrequency;
__int64 v33;
int *v34;
__int64 v35;
_OWORD v36[20];
if( Domain->Presence == ProcessorPresenceNt )
{
SelectedState = Domain->QosSelection[0].SelectedState;
SelectedFrequency = Domain->QosSelection[0].SelectedFrequency;
if( dword_140CED0CC )
{
DataPtr[0] = SelectedState;
v2 = Domain->Members.Bitmap[0];
Master = Domain->Master;
v30 = v2;
v29 = SelectedFrequency;
DataPtr[1] = 0;
PpmFireWmiEvent(&Master[-3].RelativePerformance, (_GUID *)&PPM_PERFSTATE_DOMAIN_CHANGE_GUID, 0x18ui64, DataPtr);
}
if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, &PPM_ETW_DOMAIN_PERF_STATE_CHANGE) )
{
v4 = 0;
v5 = 0;
LOWORD(v24) = 0;
do
{
v6 = (_GROUP_AFFINITY *)&v36[v4];
v7 = v5 < KeActiveProcessors.Count;
*v6 = 0i64;
v6->Group = v5;
if( v7 )
v8 = KeActiveProcessors.Bitmap[v5];
else
v8 = 0i64;
v6->Mask = v8;
KeAndGroupAffinityEx(&Domain->Members, v6, v6);
v10 = v9 == 0;
v4 = v24;
if( !v10 )
{
v4 = v24 + 1;
LOWORD(v24) = v24 + 1;
}
++v5;
}
while( v5 < 0x14u );
*(_QWORD *)&UserData.Size = 4i64;
UserData.Ptr = (unsigned __int64)&SelectedState;
p_SelectedFrequency = &SelectedFrequency;
v33 = 4i64;
v34 = &v24;
v35 = 2i64;
v11 = 3;
if( v4 )
{
v12 = v36;
v13 = v4;
do
{
v14 = 2i64 * v11;
*(&UserData.Ptr + v14) = (unsigned __int64)v12 + 8;
*((_QWORD *)&UserData.Size + v14) = 2i64;
v15 = 2i64 * (v11 + 1);
v11 += 2;
*(&UserData.Ptr + v15) = (unsigned __int64)v12++;
*((_QWORD *)&UserData.Size + v15) = 8i64;
--v13;
}
while( v13 );
}
v16 = 2i64 * v11;
*(&UserData.Ptr + v16) = (unsigned __int64)&Domain->QosSelection[0].SelectedPercent;
*((_QWORD *)&UserData.Size + v16) = 4i64;
v17 = v11 + 1;
v18 = v11 + 2;
v17 *= 2i64;
*(&UserData.Ptr + v17) = (unsigned __int64)&Domain->QosSelection[0].MinPercent;
*((_QWORD *)&UserData.Size + v17) = 4i64;
v19 = 2i64 * v18;
*(&UserData.Ptr + v19) = (unsigned __int64)&Domain->QosSelection[0].MaxPercent;
*((_QWORD *)&UserData.Size + v19) = 4i64;
v20 = v18 + 1;
v18 += 2;
v20 *= 2i64;
*(&UserData.Ptr + v20) = (unsigned __int64)&Domain->QosSelection[0].TolerancePercent;
Autonomous = Domain->QosSelection[0].Autonomous;
*((_QWORD *)&UserData.Size + v20) = 4i64;
v27 = Autonomous;
v22 = 2i64 * v18;
*(&UserData.Ptr + v22) = (unsigned __int64)&v27;
v23 = PpmEtwHandle;
*((_QWORD *)&UserData.Size + v22) = 4i64;
EtwWriteEx(v23, &PPM_ETW_DOMAIN_PERF_STATE_CHANGE, 0i64, 0, 0, 0, v18 + 1, &UserData);
}
}
}Referenced by:
PpmPerfApplyDomainState