MiRestoreTransitionPte

VOID __stdcall MiRestoreTransitionPte(_MMPFN *Pfn1, UINT64 RepurposingFlags){
  char v2; 
  _QWORD *v4; 
  BOOL IsPfnFileOnly; 
  UNICODE_STRING *v6; 
  UINT8 v7; 
  PWCHAR v8; 
  int v9; 
  _MMPFN *PfnDb; 
  __int64 v11; 
  unsigned __int64 v12; 
  UINT64 TopLevelPfn; 
  unsigned __int64 v14; 
  __int64 v15; 
  UINT8 *v16; 
  UINT8 v17; 
  WCHAR *v18; 
  volatile signed __int64 *v19; 
  __int64 v20; 
  int v21; 
  UINT64 v22; 
  __int64 v23; 
  WORK_QUEUE_TYPE v24; 
  void *v25; 
  unsigned __int64 v26; 
  unsigned __int64 v27; 
  _BYTE LockHandle[72]; 
  UINT64 v29; 
  memset(LockHandle, 0, 24);
  v2 = RepurposingFlags;
  v4 = 0i64;
  IsPfnFileOnly = MiIsPfnFileOnly((INT64)Pfn1);
  MiClearPfnImageVerified((UINT64)Pfn1, 12);
  LOBYTE(v9) = MI_PFN_IS_PROTO((UNICODE_STRING *)Pfn1, v6, v7, v8);
  PfnDb = MmGetPfnDb();
  if( v9 )
  {
    if( (*((_QWORD *)Pfn1 + 5) & 0x1000000000i64) != 0 || (v11 = *((_QWORD *)Pfn1 + 1), v11 <= 0) )
    {
      v12 = *((_QWORD *)Pfn1 + 5);
      if( (*((_DWORD *)Pfn1 + 4) & 0x400i64) == 0
        && !(unsigned int)MiGetPagingFileOffset((MMPTE *)((char *)Pfn1 + 16))
        && MI_IS_RESET_PTE(*((_QWORD *)Pfn1 + 2)) )
      {
        MI_CLEAR_RESET_PTE((MMPTE *)((char *)Pfn1 + 16));
        v12 = *((_QWORD *)Pfn1 + 5);
      }
    }
    else
    {
      v12 = *((_QWORD *)Pfn1 + 5);
      *((_QWORD *)Pfn1 + 1) = v11 | 0x8000000000000000ui64;
    }
  }
  else
  {
    if( (*((_DWORD *)Pfn1 + 4) & 4) == 0 )
    {
      if( MI_IS_RESET_PTE(*((_QWORD *)Pfn1 + 2)) )
        MI_CLEAR_RESET_PTE((MMPTE *)((char *)Pfn1 + 16));
      TopLevelPfn = MiGetTopLevelPfn((UINT64)Pfn1);
      v14 = (*(_QWORD *)TopLevelPfn >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64;
      if( (_MMPFN *)TopLevelPfn != Pfn1 )
        _InterlockedAnd64((volatile signed __int64 *)(TopLevelPfn + 24), 0x7FFFFFFFFFFFFFFFui64);
      _InterlockedExchangeAdd64((volatile signed __int64 *)(v14 + 1272), 0xFFFFFFFFFFFFFFFFui64);
      if( (*(_BYTE *)(v14 + 1851) & 0x60) == 64 )
        _InterlockedIncrement64((volatile signed __int64 *)(v14 + 1872));
    }
    v12 = *((_QWORD *)Pfn1 + 5);
    if( (v12 & 0xFFFFFFFFFi64) == (Pfn1 - PfnDb) / 48 )
      v4 = (_QWORD *)(*((_QWORD *)Pfn1 + 1) | 0x8000000000000000ui64);
  }
  v15 = *(_QWORD *)(qword_140C4E388 + 8 * ((v12 >> 39) & 0x3FF));
  v29 = *((_QWORD *)Pfn1 + 2);
  MiSetNonResidentPteHeat(&v29, 0i64);
  if( v4 )
  {
    v19 = 0i64;
  }
  else
  {
    v19 = (volatile signed __int64 *)((char *)MmGetPfnDb() + 48 * (v12 & 0xFFFFFFFFFi64));
    LODWORD(v20) = MiMapPageInHyperSpaceWorker(v12 & 0xFFFFFFFFFi64, v16, 0x80000000ui64);
    v4 = (_QWORD *)(v20 + 8i64 * ((*((_DWORD *)Pfn1 + 2) >> 3) & 0x1FF));
  }
  *v4 = v29;
  if( v19 )
    MiUnmapPageInHyperSpaceWorker(v4, 0x11u, 0x80000000ui64);
  LOBYTE(v21) = MI_PFN_IS_PROTO((UNICODE_STRING *)Pfn1, (UNICODE_STRING *)v16, v17, v18);
  if( v21 )
  {
    v23 = *((_QWORD *)Pfn1 + 2);
    if( (v23 & 0x400) != 0 )
    {
      if( qword_140C4DC80 && (v23 & 0x10) == 0 )
        v23 &= ~qword_140C4DC80;
      MiDereferenceControlAreaPfnList(*(_CONTROL_AREA **)(v23 >> 16), (_SUBSECTION *)(v23 >> 16), v22, 3ui64);
    }
  }
  if( v19 )
  {
    MiLockNestedPageAtDpcInline((INT64)v19);
    MiDecrementShareCount((UINT64)v19);
    _InterlockedAnd64(v19 + 3, 0x7FFFFFFFFFFFFFFFui64);
  }
  if( !IsPfnFileOnly )
  {
    *((_QWORD *)Pfn1 + 5) &= 0x8FFFFFFFFFFFFFFFui64;
    if( (v2 & 1) != 0 )
    {
      *((_BYTE *)Pfn1 + 35) &= 0xF8u;
    }
    else
    {
      _InterlockedIncrement((volatile signed __int32 *)(v15 + 4i64 * (unsigned int)MiGetPfnPriority((INT64)Pfn1) + 4280));
      *((_BYTE *)Pfn1 + 35) &= 0xF8u;
      if( P )
      {
        *(_QWORD *)LockHandle = 0i64;
        *(_QWORD *)&LockHandle[8] = &qword_140C4E580;
        KxAcquireQueuedSpinLock((PIO_WORKITEM)LockHandle, (PIO_WORKITEM_ROUTINE)&qword_140C4E580, v24, v25);
        v26 = (unsigned __int64)P;
        if( !P )
          goto LABEL_44;
        v27 = (__int64)P[2].Next & 0xFFF;
        if( ((__int64)P[2].Next & 0xFFF) != 0 )
        {
          P[2].Next->Next = (_SLIST_ENTRY *)((Pfn1 - MmGetPfnDb()) / 48);
          *(_QWORD *)(v26 + 32) += 8i64;
          v27 = *(_QWORD *)(v26 + 32) & 0xFFFi64;
        }
        if( v27 < 0xC00 )
        {
          if( v27 )
            v26 = 0i64;
          else
            *(_QWORD *)(v26 + 24) = KUSER_SHARED_DATA.TickCountQuad;
          KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
        }
        else
        {
LABEL_44:
          v26 = (unsigned int)dword_140C4E568;
          KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
        }
      }
      else
      {
        v26 = (unsigned int)dword_140C4E568;
      }
      if( v26 )
        KeInsertQueueDpc(&stru_140C4E708, 0i64, 0i64);
    }
  }
}

Referenced by:

MiDiscardTransitionPteEx
MiHandleInPageError
MiInsertPageInList
MiRelinkStandbyPage
MiRemoveLowestPriorityStandbyPage
MiReuseStandbyPage
MiWriteCompletePfn