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