MiDecrementAndInsertStandbyPages

VOID __stdcall MiDecrementAndInsertStandbyPages(ULONG_PTR *LockedPfns, UINT64 StandbyCount, UINT8 PageIrql){
  __int64 v3; 
  ULONG_PTR *v4; 
  unsigned __int64 v5; 
  _MMPFN *PfnDb; 
  __int64 v7; 
  char v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  int v12; 
  __int64 v13; 
  int v14; 
  __int64 v15; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v17; 
  _MI_ZERO_THREAD_CONTEXT *MmInternal; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  char *v21; 
  int v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  char v26; 
  __int64 v27; 
  int v28; 
  unsigned int v29; 
  unsigned __int64 v30; 
  UINT64 *v31; 
  unsigned int LockCount; 

  LockCount = StandbyCount;
  v3 = 0i64;
  v4 = LockedPfns;
  v5 = 0i64;
  if( (_DWORD)StandbyCount )
  {
    MiPteInShadowRange((UINT64)&v30);
    PfnDb = MmGetPfnDb();
    do
    {
      v7 = *(_QWORD *)&v4[2 * v5];
      v30 = v3;
      v8 = *(_BYTE *)(v7 + 34);
      *(_QWORD *)(v7 + 24) &= 0xC000000000000000ui64;
      *(_WORD *)(v7 + 32) = v3;
      *(_BYTE *)(v7 + 34) = v8 & 0xF8 | 2;
      v31 = (UINT64 *)(v7 + 16);
      LODWORD(v9) = MI_READ_PTE_LOCK_FREE(v7 + 16);
      v10 = *(_QWORD *)(v7 + 8);
      v11 = *(_QWORD *)(v7 + 40) & 0xFFFFFFFFFi64;
      v12 = 4;
      v13 = (v9 >> 5) & 0x1F;
      v14 = *((unsigned __int8 *)&PfnDb[v11].u3 + 2) >> 6;
      if( !v14 || v14 == 3 )
      {
        v12 = 12;
      }
      else if( v14 == 2 )
      {
        v12 = 28;
      }
      LODWORD(v15) = MiMakeValidPte(0i64, v11, v12 | 0xA0000000);
      CurrentPrcb = KeGetCurrentPrcb();
      v17 = v15;
      MmInternal = (_MI_ZERO_THREAD_CONTEXT *)CurrentPrcb->MmInternal;
      if( !MmInternal
        || (MiGetUltraMapping(MmInternal + 3112, 3i64),
            v20 = v19,
            v21 = (char *)MmGetPteBase() + ((v19 >> 9) & 0x7FFFFFFFF8i64),
            *((_QWORD *)MmInternal + 1543) = v21,
            !v19) )
      {
        v20 = ((unsigned __int64)CurrentPrcb->HyperPte & 0xFFFFFFFFFFFFF000ui64)
            + (((__int64)CurrentPrcb->HyperPte & 0xFFF) << 12);
        v21 = (char *)MmGetPteBase() + ((v20 >> 9) & 0x7FFFFFFFF8i64);
      }
      LOBYTE(v22) = MiPteInShadowRange((UINT64)v21);
      if( v22 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v17 & 1) != 0 )
        v17 |= 0x8000000000000000ui64;
      *(_QWORD *)v21 = v17;
      v23 = (v10 >> 3) & 0x1FF;
      LODWORD(v24) = MI_READ_PTE_LOCK_FREE(v20 + 8i64 * (unsigned int)v23);
      v30 = v24;
      LODWORD(v25) = MiMakeTransitionPte((v24 >> 12) & 0xFFFFFFFFFi64, v13);
      v30 = v25;
      v26 = v25;
      v27 = v25;
      LOBYTE(v28) = MiPteInShadowRange(v20 + 8i64 * (unsigned int)v23);
      if( v28 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v26 & 1) != 0 )
        v27 |= 0x8000000000000000ui64;
      *(_QWORD *)(v20 + 8i64 * (unsigned int)v23) = v27;
      MiUnmapPageInHyperSpaceWorker((VOID *)(v20 + 8i64 * (unsigned int)v23), 0x11u, 0x80000000ui64);
      MiSetNonResidentPteHeat(v31, 0i64);
      ++v5;
      v4 = LockedPfns;
      PfnDb = MmGetPfnDb();
      v3 = v29;
    }
    while( v5 < LockCount );
  }
  MiInsertAndUnlockStandbyPages(0i64, (PVOID *)v4, (UINT8 *)LockCount, PageIrql);
}

Referenced by:

MmUnmapViewInSystemCache