PopThermalSxExit
VOID __stdcall PopThermalSxExit(UINT8 WakeFromHibernate){
_ETHREAD *CurrentThread;
_POP_RW_LOCK *Value;
_ETHREAD *v3;
if( PoResumeFromHibernate )
{
PopAcquirePolicyLock();
if( PopThermalHibernateInitiated )
{
PopThermalHibernateInitiated = 0;
ZwUpdateWnfStateData();
}
PopReleasePolicyLock();
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PopPolicyDeviceLock, 0i64);
Value = (_POP_RW_LOCK *)PopThermal;
if( PopThermal != &PopThermal )
{
do
{
PopAcquireRwLockExclusive(Value + 27);
v3 = *(_ETHREAD **)&KUSER_SHARED_DATA.InterruptTime.LowPart;
Value[32].Lock.Value = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
Value[32].Thread = v3;
LOBYTE(Value[31].Thread) = 0;
PopReleaseRwLock((UINT64)&Value[27]);
Value = (_POP_RW_LOCK *)Value->Lock.Value;
}
while( Value != (_POP_RW_LOCK *)&PopThermal );
}
PopReleaseRwLock((UINT64)&PopPolicyDeviceLock);
PopCoolingSxTransition(0);
}Referenced by:
PopTransitionSystemPowerStateEx