PpmCheckComputeEnergy

UINT8 __stdcall PpmCheckComputeEnergy(){
  unsigned __int64 v0; 
  unsigned __int16 v1; 
  unsigned __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int v12; 
  __int64 v13; 
  __int64 v14; 
  unsigned int v15; 
  REGHANDLE v16; 
  _KPRCB *Prcb; 
  unsigned int v19; 
  UINT64 ProcessorNumber; 
  __int64 v21[3]; 
  __int64 v22; 
  __int128 v23; 
  __int128 v24; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  __int64 *v26; 
  __int64 v27; 

  v21[0] = 0i64;
  if( *(&stru_140C23628 + 763) )
  {
    v0 = KeActiveProcessors.Bitmap[0];
    v1 = 0;
    ProcessorNumber = 0x4000000040i64;
    v24 = 0i64;
    v23 = 0i64;
    while( v0 )
    {
LABEL_4:
      _BitScanForward64(&v2, v0);
      v0 &= ~(1i64 << v2);
      v3 = (unsigned int)KiProcessorNumberToIndexMappingTable[64 * v1 + (unsigned __int8)v2];
      if( (unsigned int)v3 >= (unsigned int)KeNumberProcessors_0 )
      {
        v4 = 0i64;
      }
      else
      {
        _mm_lfence();
        v4 = (__int64)*(&KiProcessorBlock + v3);
      }
      v5 = *(unsigned __int8 *)(v4 + 33208);
      v6 = 4 * v5;
      *((_DWORD *)&v21[-1] + v5) = v3;
      v7 = 8 * v5;
      *(_QWORD *)((char *)&v24 + v7) += *(_QWORD *)(v4 + 33224);
      *(_QWORD *)((char *)&v23 + v7) += *(_QWORD *)(v4 + 33232);
      v8 = *(_QWORD *)(v4 + 33128);
      v9 = *(_QWORD *)(v4 + 33136);
      if( v8 && v9 )
      {
        if( *(_BYTE *)(v9 + 100) )
        {
          v10 = *(_DWORD *)(v9 + 116);
        }
        else
        {
          v10 = *(_DWORD *)(v9 + 72);
          v11 = *(_DWORD *)(v8 + 368);
          if( v10 >= v11 )
            v10 = v11;
        }
      }
      else
      {
        v10 = 100;
      }
      *(_DWORD *)((char *)&v21[2] + v6) = v10;
      *(_QWORD *)(v4 + 33224) = 0i64;
      *(_QWORD *)(v4 + 33232) = 0i64;
    }
    while( ++v1 < (unsigned int)KeActiveProcessors.Count )
    {
      v0 = KeActiveProcessors.Bitmap[v1];
      if( v0 )
        goto LABEL_4;
    }
    v12 = 0;
    v13 = 0i64;
    v14 = 0i64;
    do
    {
      v15 = *(_DWORD *)((char *)&v21[-1] + v13);
      if( v15 != 64 )
      {
        (*(&stru_140C23628 + 763))(
          v12,
          *(_QWORD *)((char *)&v24 + v14),
          *(_QWORD *)((char *)&v23 + v14),
          *(unsigned int *)((char *)&v21[2] + v13),
          v21);
        v22 = v21[0];
        v19 = v12;
        if( PpmEtwRegistered )
        {
          v16 = PpmEtwHandle;
          if( EtwEventEnabled(PpmEtwHandle, &PPM_ETW_COMPUTE_ENERGY) )
          {
            *(_QWORD *)&UserData.Size = 4i64;
            UserData.Ptr = (unsigned __int64)&v19;
            v27 = 8i64;
            v26 = &v22;
            EtwWriteEx(v16, &PPM_ETW_COMPUTE_ENERGY, 0i64, 0, 0, 0, 2u, &UserData);
          }
        }
        Prcb = KeGetPrcb(v15);
        Prcb->PowerState.SnapTimeLast += v21[0];
      }
      ++v12;
      v13 += 4i64;
      v14 += 8i64;
    }
    while( v12 < 2 );
  }
  return 1;
}

Referenced by:

No references.