PoEnergyContextCleanup

VOID __stdcall PoEnergyContextCleanup(INT64 a1){
  _POP_RW_LOCK *v1; 
  unsigned __int64 v3; 
  __int64 v4; 
  unsigned int TimelineBitmapTime; 
  __int64 v6; 
  _POP_RW_LOCK *v7; 
  unsigned int v8; 
  INT64 *p_bf_0; 
  INT64 v10; 
  INT64 bf_0; 
  INT64 Thread; 
  INT64 v13[2]; 
  __int64 v14; 
  _POP_RW_LOCK *v15; 

  v1 = *(_POP_RW_LOCK **)(a1 + 2280);
  HIDWORD(v13[0]) = 0;
  v14 = 0i64;
  if( v1 )
  {
    v3 = (KUSER_SHARED_DATA.TickCountQuad * KUSER_SHARED_DATA.TickCountMultiplier) >> 24;
    v4 = 0i64;
    TimelineBitmapTime = KeQueryTimelineBitmapTime();
    v6 = 3i64;
    do
    {
      v8 = RtlStateDurationCapture((__int64)&v1[6].Thread + v4, (_ETHREAD **)((char *)&v1[6].Thread + v4), v3);
      if( v7 == (_POP_RW_LOCK *)&v1[6].Thread )
      {
        p_bf_0 = &v1[19].Lock._bf_0;
      }
      else if( v7 == &v1[7] )
      {
        p_bf_0 = (INT64 *)&v1[19].Thread;
      }
      else
      {
        p_bf_0 = 0i64;
      }
      if( p_bf_0 && v8 )
        RtlTimelineBitmapUpdateRange(p_bf_0, TimelineBitmapTime - (v8 >> 12), TimelineBitmapTime);
      v4 += 8i64;
      --v6;
    }
    while( v6 );
    RtlStateDurationCapture((__int64)&v1[26], &v1[26].Lock._bf_0, v3);
    v14 = 0i64;
    v13[0] = 4i64;
    v15 = v1;
    v13[1] = a1;
    PopAcquireRwLockExclusive(v1 + 27);
    PopEtEnumEnergyTrackers(v10, (INT64)v13);
    PopReleaseRwLock(v1 + 27);
    bf_0 = v1[28].Lock._bf_0;
    if( bf_0 )
    {
      PopEtAppIdDereference(bf_0);
      v1[28].Lock._bf_0 = 0i64;
    }
    Thread = (INT64)v1[28].Thread;
    if( Thread )
    {
      RtlInternEntryDereference(PopEtGlobals + 56, Thread);
      v1[28].Thread = 0i64;
    }
  }
}

Referenced by:

No references.