MiUpdatePfnPriorityByPte

VOID __stdcall MiUpdatePfnPriorityByPte(_MMPTE *PointerPte, UINT64 DesiredPriority){
  unsigned int v2; 
  unsigned __int64 PteBase; 
  __int64 v5; 
  WCHAR *v6; 
  unsigned __int64 v7; 
  int v8; 
  __int64 v9; 
  UINT8 v10; 
  char *v11; 
  unsigned __int8 CurrentIrql; 
  int v13; 
  char v14; 
  char v15; 
  _MMPTE *PteLimit; 
  unsigned __int64 v17; 
  INT64 v18; 
  UINT16 v19; 
  char v20; 
  unsigned int v21; 
  UINT64 SpinCount; 
  __int64 v23; 
  v2 = DesiredPriority;
  while( 2 )
  {
    PteBase = (unsigned __int64)MmGetPteBase();
    while( 1 )
    {
      v5 = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
      v23 = v5;
      v7 = v5;
      if( (v5 & 1) != 0 )
      {
        v8 = 6;
      }
      else
      {
        if( (v5 & 0x400) != 0 || (v5 & 0x800) == 0 || !MiInvalidPteConforms(v5) )
          return;
        if( qword_140C4DC80 )
        {
          if( (v7 & 0x10) != 0 )
            v7 &= ~0x10ui64;
          else
            v7 &= ~qword_140C4DC80;
        }
        v8 = 2;
      }
      v9 = (v7 >> 12) & 0xFFFFFFFFFi64;
      v10 = 6 * v9;
      if( (*((_QWORD *)MmGetPfnDb() + 6 * v9 + 5) & 0x4000000000000i64) == 0 )
        return;
      v11 = (char *)MmGetPfnDb() + 48 * v9;
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)v11 + 6, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *((__int64 *)v11 + 3) < 0 );
      }
      if( (_MMPTE *)(*((_QWORD *)v11 + 1) | 0x8000000000000000ui64) != PointerPte )
      {
        LOBYTE(v13) = MI_PFN_IS_PROTO((UNICODE_STRING *)v11, (UNICODE_STRING *)v9, v10, v6);
        if( !v13 || (unsigned __int64)PointerPte < PteBase || PointerPte > MmGetPteLimit() )
          goto LABEL_44;
      }
      v14 = v11[34];
      v15 = v14 & 7;
      if( v8 != 6 )
        break;
      if( v15 == 6 )
        goto LABEL_31;
      _InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(CurrentIrql);
      PteBase = (unsigned __int64)MmGetPteBase();
      if( (unsigned __int64)PointerPte >= PteBase )
      {
        PteLimit = MmGetPteLimit();
        if( PointerPte <= PteLimit )
        {
          v17 = (__int64)(((_QWORD)PointerPte << 25) - (PteBase << 25)) >> 16;
          if( (v17 < PteBase || v17 > (unsigned __int64)PteLimit) && (unsigned int)MiGetSystemRegionType(v17) == 9 )
            return;
        }
      }
    }
    if( (unsigned __int8)(v15 - 2) > 2u || (*((_QWORD *)v11 + 3) & 0x4000000000000000i64) != 0 )
    {
LABEL_32:
      _InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(CurrentIrql);
      continue;
    }
    break;
  }
LABEL_31:
  v18 = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
  if( v23 != v18 )
    goto LABEL_32;
  v20 = v11[35];
  if( (v20 & 8) != 0 )
    v21 = 5;
  else
    v21 = v20 & 7;
  if( v2 != v21 && v2 >= v21 )
  {
    if( (v14 & 7) == 2 )
    {
      if( v21
        || (*((_DWORD *)v11 + 4) & 0x400i64) != 0
        || !(unsigned int)MiIsPteInStore(
                            *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v11 + 5) >> 39) & 0x3FFi64)),
                            *((_QWORD *)v11 + 2)) )
      {
        MiRelinkStandbyPage((_MMPFN *)v11, v2, v19);
      }
    }
    else
    {
      v11[35] = v20 ^ (v2 ^ v20) & 7;
    }
  }
LABEL_44:
  _InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
  __writecr8(CurrentIrql);
}

Referenced by:

MiPfPrepareReadList
MiPfPrepareSequentialReadList
MiSystemFault