MmMarkHiberPhase

VOID __stdcall MmMarkHiberPhase(){
  __int64 v0; 
  UINT64 v1; 
  void *ShadowMapping; 
  UINT64 v3; 
  _MMPTE *v4; 
  VOID *v5; 
  UINT64 v6; 
  __int64 v7; 
  __int64 v8; 
  _MMPTE *v9; 
  _QWORD **v10; 
  _QWORD *v11; 
  _QWORD *i; 
  _QWORD **v13; 
  VOID *v14; 
  _QWORD *v15; 
  _QWORD *v16; 
  UINT64 Tag; 
  UINT64 Tagc; 
  UINT64 Taga; 
  UINT64 Tagd; 
  UINT64 Tage; 
  UINT64 Tagb; 
  _MM_KERNEL_DUMP_CONTEXT Context[2]; 
  __int64 v24; 
  __int128 v25; 
  __int128 v26; 

  v25 = 0i64;
  v26 = 0i64;
  MiMarkKernelPageTablePages();
  v24 = 0i64;
  *(_QWORD *)Context = MiGatherHiberRange;
  v0 = 2i64;
  MiGatherHiberRange(Context, (VOID *)(PsInitialSystemProcess->Pcb.DirectoryTableBase >> 12), 1ui64, 2ui64);
  MiMarkNonPagedHiberPhasePages(
    MmGetPfnDb(),
    (_MMPTE *)((char *)&MmGetPfnDb()[*(&stru_140C50B28 + 852)].u4.EntireField + 7),
    (_MMPTE *)0x200,
    v1);
  LODWORD(Tag) = 1634168141;
  PoSetHiberRange(0i64, 0x14000ui64, *(&stru_140C4DB30 + 507), 1ui64, Tag);
  LODWORD(Tagc) = 1651535181;
  PoSetHiberRange(0i64, 0x10000ui64, KeGetCurrentThread()->ApcState.Process, 0xA40ui64, Tagc);
  ShadowMapping = KeGetCurrentThread()->ApcState.Process->Vm.Shared.ShadowMapping;
  if( ShadowMapping )
  {
    LODWORD(Taga) = 1651535181;
    PoSetHiberRange(0i64, 0x10000ui64, ShadowMapping, 0x1000ui64, Taga);
  }
  if( MiIsRetpolineEnabled() )
  {
    LODWORD(Taga) = 1651535181;
    PoSetHiberRange(
      0i64,
      0x10000ui64,
      BitMap.Buffer,
      8 * ((BitMap.SizeOfBitMap >> 6) + ((BitMap.SizeOfBitMap & 0x3F) != 0)),
      Taga);
    LODWORD(Tagd) = 1651535181;
    PoSetHiberRange(0i64, 0x10000ui64, (VOID *)qword_140C4C9A8, (unsigned int)(dword_140C4C9C8 << 12), Tagd);
  }
  MiMarkNonPagedHiberPhasePages(
    *(&stru_140C4DB30 + 139),
    (_MMPTE *)(*(&stru_140C4DB30 + 139) + *(&stru_140C4DB30 + 140) - 1i64),
    0i64,
    v3);
  LODWORD(Taga) = 1685286221;
  PoSetHiberRange(0i64, 0x10000ui64, &KUSER_SHARED_DATA, 0x1000ui64, Taga);
  LODWORD(Tage) = 1685286221;
  PoSetHiberRange(0i64, 0x10000ui64, MmUnloadedDrivers, 0x7D0ui64, Tage);
  v7 = 0i64;
  v8 = 50i64;
  do
  {
    v9 = *(_MMPTE **)((char *)MmUnloadedDrivers + v7 + 8);
    if( v9 )
    {
      LODWORD(Tagb) = 1685286221;
      PoSetHiberRange(0i64, 0x10000ui64, v9, *(unsigned __int16 *)((char *)MmUnloadedDrivers + v7), Tagb);
    }
    v7 += 40i64;
    --v8;
  }
  while( v8 );
  v10 = (_QWORD **)((char *)&stru_140C4DB30 + 3680);
  do
  {
    v11 = *v10;
    i = 0i64;
    while( v11 )
    {
      i = v11;
      v11 = (_QWORD *)*v11;
    }
    while( i )
    {
      v13 = (_QWORD **)i[1];
      v14 = i;
      v15 = i;
      if( v13 )
      {
        v16 = *v13;
        for( i = (_QWORD *)i[1]; v16; v16 = (_QWORD *)*v16 )
          i = v16;
      }
      else
      {
        while( 1 )
        {
          i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
          if( !i || (_QWORD *)*i == v15 )
            break;
          v15 = i;
        }
      }
      LODWORD(Tagb) = 1867083085;
      PoSetHiberRange(0i64, 0x10000ui64, v14, 0x440ui64, Tagb);
    }
    ++v10;
    --v0;
  }
  while( v0 );
  MiMarkHiberNotCachedPages(v5, v4, v9, v6);
}

Referenced by:

PopMarkComponentsBootPhase