PopCoolingSxTransition
VOID __stdcall PopCoolingSxTransition(CHAR a1){
__int64 i;
INT64 v3;
__int64 j;
__int64 v5;
PopAcquireRwLockExclusive(&PopCoolingExtensionLock);
for( i = PopCoolingExtensionList; (__int64 *)i != &PopCoolingExtensionList; i = *(_QWORD *)i )
{
if( *(_BYTE *)(i + 64) )
{
PopAcquireRwLockExclusive((_POP_RW_LOCK *)(i + 32));
for( j = *(_QWORD *)(i + 16); j != i + 16; j = *(_QWORD *)j )
{
if( *(_BYTE *)(j + 18) )
{
if( a1 )
{
if( *(_QWORD *)(i + 136) )
{
PopThermalUpdatePassiveTimeTracking();
PopTraceThermalRequestPassiveHistogram(j);
}
if( *(_QWORD *)(i + 128) )
{
LOBYTE(v3) = *(_BYTE *)(j + 17) == 0;
PopThermalUpdateActiveTimeTracking(j + 40, v3);
PopTraceThermalRequestActiveActivity(j);
}
*(_BYTE *)(j + 40) = 1;
}
else
{
v5 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
*(_QWORD *)(j + 48) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
*(_QWORD *)(j + 56) = v5;
*(_BYTE *)(j + 40) = 0;
}
}
}
PopReleaseRwLock((_POP_RW_LOCK *)(i + 32));
}
}
PopReleaseRwLock(&PopCoolingExtensionLock);
}Referenced by:
PopThermalSxEntry
PopThermalSxExit