MmSetAddressRangeModifiedEx

INT64 __fastcall MmSetAddressRangeModifiedEx(UINT64 rcx0, INT64 a2){
  INT64 v2; 
  int v4; 
  _MMPTE *PteBase; 
  INT64 *v6; 
  unsigned __int64 v7; 
  UINT64 v8; 
  INT64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  UINT64 v13; 
  unsigned __int64 v14; 
  BOOL v15; 
  UINT64 v16; 
  INT64 v17; 
  char *v18; 
  unsigned __int8 CurrentIrql; 
  bool v20; 
  INT64 v21; 
  int v23; 
  __int64 v24; 
  unsigned __int64 v25; 
  INT64 a5; 
  UINT64 v27; 
  UINT64 SpinCount; 
  INT64 a8; 
  INT64 a1; 
  UINT64 v31; 
  INT64 a11; 
  INT64 v33; 
  INT64 v34[4]; 
  INT64 result[20]; 
  v2 = a2 - 1;
  memset((INT64)result, 0i64);
  LOWORD(a5) = 0;
  HIDWORD(SpinCount) = MiMakeProtectionMask(4ui64);
  v34[1] = 20i64;
  v4 = HIDWORD(SpinCount);
  v34[0] = 0i64;
  v34[2] = 0i64;
  v34[3] = 0i64;
  PteBase = MmGetPteBase();
  v6 = (INT64 *)((char *)PteBase + ((rcx0 >> 9) & 0x7FFFFFFFF8i64));
  v7 = (unsigned __int64)PteBase + (((rcx0 + v2) >> 9) & 0x7FFFFFFFF8i64);
  v8 = rcx0 & 0xFFFFFFFFFFFFF000ui64;
  v9 = 0i64;
  v31 = (UINT64)MiLockWorkingSetOptimal((INT64)&qword_140C52700, (UINT64)v6, (BYTE *)&a5 + 1);
  v10 = *(_QWORD *)(MiGetSystemCacheReverseMap(v8) + 24);
  v11 = v10 & 0xFFFFFFFFFFFFFFFEui64;
  if( (v10 & 1) == 0 )
    v11 = v10;
  v12 = *(_QWORD *)(qword_140C4E388 + 8i64 * (*(_WORD *)(*(_QWORD *)v11 + 60i64) & 0x3FF));
  v13 = (UINT64)v6;
  a11 = v12 + 7232;
  do
  {
    v14 = *v6;
    v15 = MiPteInShadowRange(v13);
    v27 = v14;
    if( (v14 & 1) != 0 )
    {
      LODWORD(a8) = 0;
      v16 = 0i64;
      HIDWORD(a5) = MiPteInShadowRange((UINT64)&v27);
      v18 = (char *)MmGetPfnDb() + 48 * ((v14 >> 12) & 0xFFFFFFFFFi64);
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)v18 + 6, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *((__int64 *)v18 + 3) < 0 );
      }
      v20 = (v18[34] & 0x10) == 0;
      v21 = *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v18 + 5) >> 39) & 0x3FFi64));
      a1 = v21;
      if( v20 || (*((_DWORD *)v18 + 4) & 0x400i64) == 0 )
      {
        v16 = MiCaptureDirtyBitToPfn((INT64)v18);
        v21 = a1;
      }
      _InterlockedAnd64((volatile signed __int64 *)v18 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(CurrentIrql);
      if( v16 )
        MiReleasePageFileInfo(v21, v16, 0, v17, a5, v27, SpinCount, a8, a1, v31, a11, v33);
      v4 = HIDWORD(SpinCount);
      if( HIDWORD(SpinCount) != 2 || (v14 & 0x800) == 0 )
      {
        if( (v14 & 0x42) == 0 )
          goto LABEL_14;
        MiWriteValidPteNewProtection(v6, v14 & 0xFFFFFFFFFFFFFFBDui64);
        LOBYTE(a5) = 1;
LABEL_13:
        MiInsertTbFlushEntry((INT64)v34, v8, 1i64, 0i64);
        goto LABEL_14;
      }
      v9 ^= (v9 ^ v14) & 0xFFFFFFFFF000i64;
      MiWriteValidPteNewProtection(v6, v9);
      if( ((MiFlags & 0x100) != 0 || (MiFlags & 0x200) != 0) && !MI_TIGHTER_PERMISSIONS(v14, v9) )
        v23 = a8;
      else
        v23 = 1;
      if( (v14 & 0x42) != 0 )
        LOBYTE(a5) = 1;
      if( v23 )
        goto LABEL_13;
    }
    else if( v4 == 2 && (v14 & 8) == 0 )
    {
      v24 = v14 | 8;
      v27 = v24;
      v25 = v24;
      if( v15 )
      {
        v25 = v24;
        if( (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0 && (v24 & 1) != 0 )
          v25 = v24 | 0x8000000000000000ui64;
      }
      *v6 = v25;
    }
LABEL_14:
    ++v6;
    v8 += 4096i64;
    v13 = (UINT64)v6;
  }
  while( (unsigned __int64)v6 <= v7 );
  MiFlushTbList((__int64)v34);
  MiUnlockPageTableInternal(a11, v31);
  MiUnlockWorkingSetShared(a11, BYTE1(a5));
  return(unsigned __int8)a5;
}

Referenced by:

CcFlushCachePriv
CcPurgeAndClearCacheSection
CcUnpinRepinnedBcb
CcZeroDataInCache
MmSetAddressRangeModified