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.