PoEnergyContextCleanup
VOID __fastcall 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_Thread;
INT64 v10;
INT64 Value;
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),
(unsigned int)v3);
if( v7 == (_POP_RW_LOCK *)&v1[6].Thread )
{
p_Thread = (INT64 *)&v1[19];
}
else if( v7 == &v1[7] )
{
p_Thread = (INT64 *)&v1[19].Thread;
}
else
{
p_Thread = 0i64;
}
if( p_Thread && v8 )
RtlTimelineBitmapUpdateRange(p_Thread, TimelineBitmapTime - (v8 >> 12), TimelineBitmapTime);
v4 += 8i64;
--v6;
}
while( v6 );
RtlStateDurationCapture((INT64)&v1[26], &v1[26].Lock.Value, (unsigned int)v3);
v14 = 0i64;
v13[0] = 4i64;
v15 = v1;
v13[1] = a1;
PopAcquireRwLockExclusive(v1 + 27);
PopEtEnumEnergyTrackers(v10, (INT64)v13);
PopReleaseRwLock((UINT64)&v1[27]);
Value = v1[28].Lock.Value;
if( Value )
{
PopEtAppIdDereference(Value);
v1[28].Lock.Value = 0i64;
}
Thread = (INT64)v1[28].Thread;
if( Thread )
{
RtlInternEntryDereference(PopEtGlobals + 56, Thread);
v1[28].Thread = 0i64;
}
}
}Referenced by:
No references.