PpmEventDomainPerfStateChange
char __fastcall PpmEventDomainPerfStateChange(__int64 a1, __int64 a2, EVENT_DESCRIPTOR *a3){
void **v3;
__int64 v5;
__int64 v6;
unsigned __int16 v7;
unsigned __int16 v8;
_GROUP_AFFINITY *v9;
bool v10;
unsigned __int64 v11;
bool v12;
unsigned int v13;
_OWORD *v14;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
unsigned int v20;
__int64 v21;
__int64 v22;
int v23;
__int64 v24;
UINT64 v25;
UINT64 UserDataCount;
int v28;
int v29;
unsigned int v30;
int v31;
int DataPtr[2];
__int64 v33;
__int64 v34;
EVENT_DATA_DESCRIPTOR UserData;
unsigned int *v36;
__int64 v37;
int *v38;
__int64 v39;
_OWORD v40[20];
void *retaddr;
v3 = &retaddr;
if( !*(_DWORD *)(a1 + 208) )
{
v29 = *(_DWORD *)(a1 + 552);
v30 = *(_DWORD *)(a1 + 564);
LOBYTE(v3) = WmiPerfStateDomainEventEnabled;
if( WmiPerfStateDomainEventEnabled )
{
DataPtr[0] = v29;
v5 = *(_QWORD *)(a1 + 32);
v6 = *(_QWORD *)(a1 + 16);
v34 = v5;
v33 = v30;
DataPtr[1] = 0;
LOBYTE(v3) = PpmFireWmiEvent((VOID *)(v6 - 136), (GUID *)&PPM_PERFSTATE_DOMAIN_CHANGE_GUID, 0x18ui64, DataPtr);
}
if( PpmEtwRegistered )
{
LOBYTE(v3) = EtwEventEnabled(PpmEtwHandle, (EVENT_DESCRIPTOR *)&PPM_ETW_DOMAIN_PERF_STATE_CHANGE, a3);
if( (_BYTE)v3 )
{
v7 = 0;
v8 = 0;
LOWORD(v28) = 0;
do
{
v9 = (_GROUP_AFFINITY *)&v40[v7];
v10 = v8 < KeActiveProcessors.Count;
*v9 = 0i64;
v9->Group = v8;
if( v10 )
v11 = KeActiveProcessors.Bitmap[v8];
else
v11 = 0i64;
v9->Mask = v11;
v12 = (unsigned int)KeAndGroupAffinityEx((_KAFFINITY_EX *)(a1 + 24), v9, v9) == 0;
v7 = v28;
if( !v12 )
{
v7 = v28 + 1;
LOWORD(v28) = v28 + 1;
}
++v8;
}
while( v8 < 0x14u );
*(_QWORD *)&UserData.Size = 4i64;
UserData.Ptr = (unsigned __int64)&v29;
v36 = &v30;
v37 = 4i64;
v38 = &v28;
v39 = 2i64;
v13 = 3;
if( v7 )
{
v14 = v40;
v15 = v7;
do
{
v16 = 2i64 * v13;
*(&UserData.Ptr + v16) = (unsigned __int64)v14 + 8;
*((_QWORD *)&UserData.Size + v16) = 2i64;
v17 = 2i64 * (v13 + 1);
v13 += 2;
*(&UserData.Ptr + v17) = (unsigned __int64)v14++;
*((_QWORD *)&UserData.Size + v17) = 8i64;
--v15;
}
while( v15 );
}
v18 = 2i64 * v13;
*(&UserData.Ptr + v18) = a1 + 560;
*((_QWORD *)&UserData.Size + v18) = 4i64;
v19 = v13 + 1;
v20 = v13 + 2;
v19 *= 2i64;
*(&UserData.Ptr + v19) = a1 + 568;
*((_QWORD *)&UserData.Size + v19) = 4i64;
v21 = 2i64 * v20;
*(&UserData.Ptr + v21) = a1 + 572;
*((_QWORD *)&UserData.Size + v21) = 4i64;
v22 = v20 + 1;
v20 += 2;
v22 *= 2i64;
*(&UserData.Ptr + v22) = a1 + 576;
v23 = *(unsigned __int8 *)(a1 + 588);
*((_QWORD *)&UserData.Size + v22) = 4i64;
v31 = v23;
v24 = 2i64 * v20;
*(&UserData.Ptr + v24) = (unsigned __int64)&v31;
v25 = PpmEtwHandle;
*((_QWORD *)&UserData.Size + v24) = 4i64;
LODWORD(UserDataCount) = v20 + 1;
LOBYTE(v3) = EtwWriteEx(
v25,
(EVENT_DESCRIPTOR *)&PPM_ETW_DOMAIN_PERF_STATE_CHANGE,
0i64,
0i64,
0i64,
0i64,
UserDataCount,
&UserData);
}
}
}
return(char)v3;
}Referenced by:
PpmPerfApplyDomainState