PoEnergyContextUpdateComponentPower

void __fastcall PoEnergyContextUpdateComponentPower(_QWORD *a1, int a2, __int64 a3){
  __int64 v3; 
  int v4; 
  int v7; 
  int v8; 
  int v9; 
  unsigned int v10; 
  int v11; 
  unsigned int v12; 
  unsigned int v13; 
  int v14; 
  unsigned int v15; 
  UINT64 *v16; 
  UINT64 TimelineBitmapTime; 
  unsigned int v18; 
  int v19; 
  int v20; 
  unsigned int v21; 
  int v22; 
  unsigned int v23; 
  unsigned int v24; 
  __int16 v25; 
  UINT64 *v26; 
  UINT64 v27; 
  unsigned int v28; 
  __int16 v29; 
  UINT64 v30; 
  unsigned int v31; 
  bool v32; 
  __int64 v33; 
  bool v34; 
  UINT64 *v35; 
  __int64 v36; 
  unsigned int v37; 
  unsigned int v38; 
  UINT64 v39; 
  _QWORD *v40; 
  unsigned int v41; 
  unsigned int v42; 
  int v43; 
  unsigned int v44; 
  int v45; 
  __int64 v46; 
  __int64 v47; 
  INT64 result; 
  INT64 v50[17]; 
  v3 = a1[285];
  v4 = a3;
  memset((INT64)&result, 0i64);
  if( v3 )
  {
    PopAcquireRwLockExclusive((_POP_RW_LOCK *)(v3 + 432));
    if( a2 == 9 )
    {
      v20 = HIDWORD(*(_QWORD *)(v3 + 384));
      v21 = ((KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24) - *(_QWORD *)(v3 + 384);
      if( v21 > 0x3E8 )
        v21 = 1000;
      v22 = -1;
      if( ~v21 >= (v20 & 0x7FFFFFFFu) )
        v22 = (v20 & 0x7FFFFFFF) + v21;
      HIDWORD(v46) = (v20 ^ v22) & 0x7FFFFFFF ^ v20;
      LODWORD(v46) = (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24;
      *(_QWORD *)(v3 + 384) = v46;
      TimelineBitmapTime = (unsigned int)KeQueryTimelineBitmapTime();
      v16 = (UINT64 *)(v3 + 344);
      goto LABEL_16;
    }
    if( a2 <= 9 )
    {
      v7 = a2 - 4;
      if( v7 )
      {
        v8 = v7 - 1;
        if( v8 )
        {
          v9 = v8 - 2;
          if( v9 )
          {
            if( v9 == 1 )
            {
              memset((INT64)v50, 0i64);
              HIDWORD(result) = HIDWORD(a3);
              LODWORD(result) = v4;
              PopEtEnergyContextSetState(a1, &result);
            }
            goto LABEL_17;
          }
          v10 = KeQueryTimelineBitmapTime();
          v11 = -1;
          v12 = v10;
          if( (_WORD)v4 )
          {
            v13 = *(_DWORD *)(v3 + 128);
            if( ~(unsigned __int16)v4 < v13 )
              v14 = -1;
            else
              v14 = v13 + (unsigned __int16)v4;
            *(_DWORD *)(v3 + 128) = v14;
            RtlTimelineBitmapUpdate((UINT64 *)(v3 + 320), v12);
          }
          if( WORD1(a3) )
          {
            v18 = *(_DWORD *)(v3 + 132);
            v19 = v18 + WORD1(a3);
            if( ~WORD1(a3) < v18 )
              v19 = v11;
            *(_DWORD *)(v3 + 132) = v19;
            RtlTimelineBitmapUpdate((UINT64 *)(v3 + 328), v12);
          }
          if( !WORD2(a3) )
          {
LABEL_17:
            PopReleaseRwLock(v3 + 432);
            return;
          }
          v15 = *(_DWORD *)(v3 + 136);
          if( ~WORD2(a3) >= v15 )
            v11 = v15 + WORD2(a3);
          *(_DWORD *)(v3 + 136) = v11;
          v16 = (UINT64 *)(v3 + 336);
          TimelineBitmapTime = v12;
LABEL_16:
          RtlTimelineBitmapUpdate(v16, TimelineBitmapTime);
          goto LABEL_17;
        }
        RtlStateDurationUpdate(
          (UINT64 *)(v3 + 112),
          v4 != 0,
          (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24);
        v28 = KeQueryTimelineBitmapTime();
        v29 = *(_WORD *)(v3 + 464);
        v30 = v28;
        v26 = (UINT64 *)(v3 + 312);
        if( v4 )
        {
          *(_WORD *)(v3 + 464) = v29 | 2;
          v27 = v28;
          goto LABEL_32;
        }
        *(_WORD *)(v3 + 464) = v29 & 0xFFFD;
        v31 = v28;
      }
      else
      {
        RtlStateDurationUpdate(
          (UINT64 *)(v3 + 104),
          v4 != 0,
          (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24);
        v23 = KeQueryTimelineBitmapTime();
        v25 = *(_WORD *)(v3 + 464);
        v26 = (UINT64 *)(v3 + 304);
        if( v4 )
        {
          v27 = v23;
          *(_WORD *)(v3 + 464) = v25 | 1;
LABEL_32:
          RtlTimelineBitmapUpdate(v26, v27);
LABEL_33:
          PopEtEnergyContextProcessStateUpdate(a1);
          goto LABEL_17;
        }
        v31 = v23;
        *(_WORD *)(v3 + 464) = v25 & 0xFFFE;
        v30 = v23;
      }
      RtlTimelineBitmapUpdateRange((INT64 *)v26, v31 - (v24 >> 12), v30);
      goto LABEL_33;
    }
    if( a2 <= 11 )
    {
      v32 = v4 == 0;
      v33 = 360i64;
      v34 = !v32;
      if( a2 != 11 )
        v33 = 352i64;
      v35 = (UINT64 *)(v3 + v33);
      v36 = 400i64;
      if( a2 != 11 )
        v36 = 392i64;
      RtlStateDurationUpdate(
        (UINT64 *)(v3 + v36),
        !v32,
        (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24);
      v37 = KeQueryTimelineBitmapTime();
      TimelineBitmapTime = v37;
      v16 = v35;
      if( v34 )
        goto LABEL_16;
      v39 = v37 - (v38 >> 12);
    }
    else
    {
      if( a2 == 13 )
      {
        ++*(_DWORD *)(v3 + 424);
        TimelineBitmapTime = (unsigned int)KeQueryTimelineBitmapTime();
        v16 = (UINT64 *)(v3 + 376);
        goto LABEL_16;
      }
      if( a2 != 12 )
      {
        if( a2 == 14 )
          ++*(_DWORD *)(v3 + 428);
        goto LABEL_17;
      }
      v40 = (_QWORD *)(v3 + 408);
      if( v4 == 3 )
      {
        if( *(int *)(v3 + 412) < 0 )
          goto LABEL_17;
        v43 = HIDWORD(*v40);
        v44 = ((KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24) - *v40;
        if( v44 > 0x1000 )
          v44 = 4096;
        v45 = -1;
        if( ~v44 >= (v43 & 0x7FFFFFFFu) )
          v45 = (v43 & 0x7FFFFFFF) + v44;
        HIDWORD(v47) = (v43 ^ v45) & 0x7FFFFFFF ^ v43;
        LODWORD(v47) = (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24;
        *v40 = v47;
        TimelineBitmapTime = (unsigned int)KeQueryTimelineBitmapTime();
LABEL_57:
        v16 = (UINT64 *)(v3 + 368);
        goto LABEL_16;
      }
      if( (unsigned int)(v4 - 1) > 1 )
        goto LABEL_17;
      v41 = *(_DWORD *)(v3 + 472);
      if( v4 == 1 )
      {
        *(_DWORD *)(v3 + 472) = ++v41;
        if( v41 > 1 )
          goto LABEL_17;
      }
      else if( v41 )
      {
        *(_DWORD *)(v3 + 472) = --v41;
        if( v41 )
          goto LABEL_17;
      }
      RtlStateDurationUpdate(
        (UINT64 *)(v3 + 408),
        v41 != 0,
        (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24);
      v37 = KeQueryTimelineBitmapTime();
      TimelineBitmapTime = v37;
      if( v41 )
        goto LABEL_57;
      v39 = v37 - (v42 >> 12);
      v16 = (UINT64 *)(v3 + 368);
    }
    RtlTimelineBitmapUpdateRange((INT64 *)v16, v39, v37);
    goto LABEL_17;
  }
}

Referenced by:

NtSetThreadExecutionState
PopProcessDisplayRequiredChange
PsUpdateComponentPower