PpmEventTraceCoordinatedIdleStates

VOID __stdcall PpmEventTraceCoordinatedIdleStates(INT64 a1, INT64 a2, NPTEXTMETRIC *a3){
  __int64 v3; 
  unsigned int v4; 
  ULONG v5; 
  UINT64 v6; 
  VOID **PoolWithTag; 
  _EVENT_DATA_DESCRIPTOR *UserData; 
  __int64 v9; 
  _EVENT_DATA_DESCRIPTOR *v10; 
  int v11; 
  _EVENT_DATA_DESCRIPTOR *v12; 
  const wchar_t *v13; 
  int v14; 
  unsigned int v15; 

  if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, &PPM_ETW_COORDINATED_IDLE_RUNDOWN) )
  {
    v3 = PpmPlatformStates;
    v4 = PpmPlatformStates ? *(_DWORD *)PpmPlatformStates : 0;
    v15 = v4;
    v5 = 2 * v4 + 1;
    v6 = 16 * v5 + 12 * v4;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, v6, 1699565648i64);
    UserData = (_EVENT_DATA_DESCRIPTOR *)PoolWithTag;
    if( PoolWithTag )
    {
      memset(PoolWithTag, 0i64, v6);
      UserData->Reserved = 0;
      v9 = 0i64;
      v10 = &UserData[v5];
      UserData->Ptr = (unsigned __int64)&v15;
      for( UserData->Size = 4; (unsigned int)v9 < v15; UserData[v11 + 2].Reserved = 0 )
      {
        v11 = 2 * v9;
        v12 = &UserData[(unsigned int)(2 * v9 + 1)];
        LODWORD(v10->Ptr) = *(_DWORD *)(384 * v9 + v3 + 72);
        HIDWORD(v10->Ptr) = *(_DWORD *)(384 * v9 + v3 + 76);
        v10->Size = *(unsigned __int8 *)(384 * v9 + v3 + 121);
        v12->Reserved = 0;
        v12->Ptr = (unsigned __int64)v10;
        v12->Size = 12;
        v13 = *(const wchar_t **)(384 * v9 + v3 + 304);
        if( v13 )
        {
          v14 = *(unsigned __int16 *)(384 * v9 + v3 + 298);
        }
        else
        {
          v14 = 28;
          v13 = L"";
        }
        UserData[v11 + 2].Ptr = (unsigned __int64)v13;
        v10 = (_EVENT_DATA_DESCRIPTOR *)((char *)v10 + 12);
        UserData[v11 + 2].Size = v14;
        v9 = (unsigned int)(v9 + 1);
      }
      EtwWrite(PpmEtwHandle, &PPM_ETW_COORDINATED_IDLE_RUNDOWN, 0, v5, UserData);
      ExFreePoolWithTag(UserData, 0x654D5050u);
    }
  }
}

Referenced by:

PpmEventTraceControlCallback