PopTransitionToSleep
VOID __stdcall PopTransitionToSleep(VOID *Context){
POWER_STATE_HANDLER_TYPE v1;
NTSTATUS v3;
INT64 v4;
char v5;
char v6;
int v7;
NTSTATUS v8;
NTSTATUS v9;
_MM_MIRROR_DISPATCH MirrorDispatch[4];
__int128 v11;
__int64 v12;
UINT8 LowSpace;
v1 = *((_DWORD *)Context + 18);
v12 = 0i64;
LowSpace = 0;
*(_OWORD *)MirrorDispatch = 0i64;
v11 = 0i64;
BugCheckParameter4 = KeGetCurrentThread();
if( v1 == PowerStateSleeping4 || v1 == PowerStateSleeping4Firmware )
{
if( (*(&stru_140C23628 + 2332) & 0x20) != 0 )
{
KeSetEvent((PRKEVENT)Context, 0, 1u);
KeWaitForSingleObject((UINT64)Context + 24, 0, 0, 0, 0i64);
v9 = 0;
goto LABEL_15;
}
v3 = PopEnlargeHiberFile(&LowSpace);
v4 = LowSpace;
LODWORD(v12) = 16;
*(_QWORD *)MirrorDispatch = xHalPciEarlyRestore;
if( v3 < 0 )
v4 = 1i64;
*((_QWORD *)&v11 + 1) = 0i64;
v5 = 0;
*(_QWORD *)&MirrorDispatch[2] = PopEndMirroring;
v6 = 0;
*(_QWORD *)&v11 = PopMirrorPhysicalMemory;
if( (_BYTE)v4 )
{
MmEmptyAllWorkingSets();
v6 = 1;
v7 = v12 | 1;
}
else if( (Flags & 0x20) != 0 && *(&stru_140C23628 + 706) || *(&stru_140C23628 + 707) )
{
MmEmptyAllWorkingSets();
v6 = 1;
v7 = v12 | 4;
}
else
{
if( v1 == PowerStateSleeping4Firmware )
{
MmTrimFilePagesFromWorkingSets(v4);
v7 = v12 | 1;
goto LABEL_11;
}
v7 = 20;
}
v5 = 1;
LABEL_11:
LODWORD(v12) = v7;
*(&stru_140C23628 + 2804) = v5;
*(&stru_140C23628 + 2805) = v6;
*(&stru_140C23628 + 700) = v7;
PopDiagTraceEventNoPayload(&POP_ETW_EVENT_FLUSHALLPAGES);
if( v5 )
MmFlushAllPagesEx();
PopDiagTraceEventNoPayload(&POP_ETW_EVENT_FLUSHALLPAGES_END);
PopHibernatePowerStateHandlerType = v1;
qword_140C50438 = (PRKEVENT)Context;
v8 = MmDuplicateMemory(MirrorDispatch);
qword_140C50438 = 0i64;
PopHibernatePowerStateHandlerType = PowerStateMaximum;
goto LABEL_14;
}
KeSetEvent((PRKEVENT)Context, 0, 1u);
KeWaitForSingleObject((UINT64)Context + 24, 0, 0, 0, 0i64);
v8 = PopInvokeSystemStateHandler(v1, (POP_HIBER_CONTEXT *)HiberContext);
LABEL_14:
v9 = v8;
LABEL_15:
*(&stru_140C23628 + 83) = __rdtsc();
*((_DWORD *)Context + 19) = v9;
KeSetEvent((PRKEVENT)((char *)Context + 48), 0, 0);
}Referenced by:
No references.