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.