PopUserPresentSet
VOID __stdcall PopUserPresentSet(POWER_MONITOR_REQUEST_REASON MonitorOnReason){
void *v1;
__int32 v2;
INT64 v3;
v1 = (void *)(int)MonitorOnReason;
if( (*(_DWORD *)PopSimulate & 0x40000) != 0 )
{
LODWORD(v3) = 0;
DbgkWerCaptureLiveKernelDump(
(WCHAR *)L"UserPresenceSet",
160i64,
273i64,
PopUserPresentSetStatus,
PopFullWake,
0i64,
0i64,
0i64,
v3);
}
if( byte_140C23261 == 3 )
{
_InterlockedOr(&PopPendingUserPresenceDuringSystemSleep, 1u);
_InterlockedExchange((volatile __int32 *)&PopPendingUserPresenceMonitorOnReason, (__int32)v1);
}
else
{
v2 = _InterlockedExchange(&PopUserPresentSetStatus, 1);
if( _InterlockedCompareExchange(&dword_140C23D14, 0, 0) )
{
if( !v2 )
{
_InterlockedExchange(&PopUserPresentSetStatus, 0);
KeSetEvent(&PopUserPresentCompletedEvent, 0);
}
}
else
{
if( (PopFullWake & 3) == 0 )
{
_InterlockedOr(&PopFullWake, 2u);
PopSetNotificationWork(1ui64);
}
PopResetIdleTime(2i64);
if( !v2 )
{
PopUserPresentWorkItem.Parameter = v1;
PopUserPresentWorkItem.WorkerRoutine = (void(__fastcall *)(void *))PopUserPresentSetWorker;
PopUserPresentWorkItem.List.Flink = 0i64;
ExQueueWorkItem(&PopUserPresentWorkItem, DelayedWorkQueue);
}
}
}
}Referenced by:
PopSetSystemState