PopHiberCheckResume

UINT8 __stdcall PopHiberCheckResume(){
  _QWORD *v0; 
  UINT8 v1; 
  __int64 v2; 
  unsigned __int64 v3; 
  __int64 v4; 
  INT64 v5; 
  char *v6; 
  __int64 v7; 
  _OWORD *v8; 
  __int128 v9; 
  _BYTE *v11; 
  INT64 v12; 
  __int64 v13; 
  __int128 v14; 
  __int128 v15; 
  UINT64 v16; 
  INT64 v17[40]; 

  memset(v17, 0i64, 0x138u);
  v0 = HiberContext;
  v1 = 0;
  v2 = *((_QWORD *)HiberContext + 25);
  if( *(_DWORD *)v2 )
  {
    PopCheckpointSystemSleep(PopSleepCheckpointHiberKernelHandoff);
    ((void(__fastcall *)(_QWORD))off_140C00838[0])(0i64);
    PoResumeFromHibernate = 1;
    v3 = __rdtsc();
    ((void(__fastcall *)(__int64))off_140C006C0[0])(5i64);
    ((void(__fastcall *)(__int64))off_140C00838[0])(1i64);
    if( (_BYTE)HvlHypervisorConnected )
    {
      HvlRestoreEnlightenment();
      off_140C007A8[0]();
    }
    ((void(__fastcall *)(__int64))off_140C007C0)(5i64);
    if( (_BYTE)HvlHypervisorConnected )
    {
      LOBYTE(v4) = 1;
      HvlConfigureMemoryZeroingOnReset(v4);
      if( (HvlpFlags & 2) != 0 )
      {
        HvlNotifyDebugDeviceAvailable(v12, v11);
        HvlNotifyAcpiReenabled();
      }
    }
    if( (_BYTE)KdDebuggerEnabled && !KdPitchDebugger || KdEventLoggingEnabled )
    {
      LOBYTE(KdDebuggerEnabled) = 0;
      KdInitSystem(0i64, 0i64);
    }
    if( (_BYTE)KdDebuggerEnabled && *(_DWORD *)v2 == 1347113538 )
      __debugbreak();
    if( (*(&stru_140C23628 + 582) & 0x40000000) != 0 )
      __debugbreak();
    HalInitializeOnResume(v0[28], v0[29]);
    if( *(_QWORD *)(v2 + 928) )
    {
      v13 = v0[33];
      v14 = *(_OWORD *)(v2 + 928);
      LODWORD(v17[1]) = 80;
      v15 = *(_OWORD *)(v2 + 944);
      v16 = *(_QWORD *)(v13 + 8);
      v17[4] = 0i64;
      v17[5] = 0x4000i64;
      *(_OWORD *)&v17[6] = v14;
      *(_OWORD *)&v17[8] = v15;
      MmMapMemoryDumpMdlEx2(v16, v5, (INT64)v17, 1i64);
      memset(*(void **)(v0[33] + 8i64), 0, 0x4000ui64);
    }
    v6 = (char *)&stru_140C23628 + 400;
    v7 = 3i64;
    *(&ExBootDevicesRemovedEvent + 139) = *(_QWORD *)(v2 + 904);
    v8 = (_OWORD *)(v2 + 136);
    do
    {
      *(_OWORD *)v6 = *v8;
      *((_OWORD *)v6 + 1) = v8[1];
      *((_OWORD *)v6 + 2) = v8[2];
      *((_OWORD *)v6 + 3) = v8[3];
      *((_OWORD *)v6 + 4) = v8[4];
      *((_OWORD *)v6 + 5) = v8[5];
      *((_OWORD *)v6 + 6) = v8[6];
      v6 += 128;
      v9 = v8[7];
      v8 += 8;
      *((_OWORD *)v6 - 1) = v9;
      --v7;
    }
    while( v7 );
    *(_OWORD *)v6 = *v8;
    *((_OWORD *)v6 + 1) = v8[1];
    *((_OWORD *)v6 + 2) = v8[2];
    *((_OWORD *)v6 + 3) = v8[3];
    *((_OWORD *)v6 + 4) = v8[4];
    *((_OWORD *)v6 + 5) = v8[5];
    *((_OWORD *)v6 + 6) = v8[6];
    *((_QWORD *)v6 + 14) = *((_QWORD *)v8 + 14);
    *((_BYTE *)v0 + 4) = 0;
    *(&stru_140C23628 + 76) = v3;
    *(&stru_140C23628 + 62) = v3 - *(&stru_140C23628 + 63);
    if( (HvlpFlags & 2) != 0 )
      *((_DWORD *)v0 + 5) = 0;
    return 1;
  }
  return v1;
}

Referenced by:

PopSaveHiberContextWrapper