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