MmSetAddressRangeModifiedEx

NTSTATUS __stdcall MmSetAddressRangeModifiedEx(UINT64 a1, INT64 a2){
  INT64 v2; 
  int v4; 
  _MMPTE *PteBase; 
  INT64 *v6; 
  unsigned __int64 v7; 
  char *v8; 
  INT64 v9; 
  __int64 v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  UINT64 v14; 
  UINT64 v15; 
  int v16; 
  int v17; 
  _MMPTE v18; 
  int v19; 
  _MMPFN *v20; 
  unsigned __int8 CurrentIrql; 
  bool v22; 
  _MI_PARTITION *v23; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v24; 
  int v26; 
  __int64 v27; 
  unsigned __int64 v28; 
  unsigned __int8 v29; 
  char v30[3]; 
  int v31; 
  UINT64 v32; 
  UINT64 SpinCount; 
  int v34; 
  _MI_PARTITION *Partition; 
  UINT64 v36; 
  INT64 v37; 
  _MI_TB_FLUSH_LIST TbFlushList; 
  __int16 v39; 
  __int16 v40; 
  __int64 v41; 
  __int64 v42; 
  __int64 v43; 
  char v44[152]; 

  v2 = a2 - 1;
  v30[0] = 0;
  v40 = 0;
  memset(v44, 0i64, sizeof(v44));
  v29 = 0;
  HIDWORD(SpinCount) = MiMakeProtectionMask(4ui64);
  v41 = 20i64;
  v4 = HIDWORD(SpinCount);
  TbFlushList = 0;
  v39 = 0;
  v42 = 0i64;
  v43 = 0i64;
  PteBase = MmGetPteBase();
  v6 = (INT64 *)((char *)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64));
  v7 = (unsigned __int64)PteBase + (((a1 + v2) >> 9) & 0x7FFFFFFFF8i64);
  v8 = (char *)(a1 & 0xFFFFFFFFFFFFF000ui64);
  v9 = 0i64;
  v36 = (UINT64)MiLockWorkingSetOptimal((INT64)&stru_140C50B28 + 7128, (UINT64)v6, v30);
  LODWORD(v10) = MiGetSystemCacheReverseMap((UINT64)v8);
  v11 = *(_QWORD *)(v10 + 24);
  v12 = v11 & 0xFFFFFFFFFFFFFFFEui64;
  if( (v11 & 1) == 0 )
    v12 = *(_QWORD *)(v10 + 24);
  v13 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * (*(_WORD *)(*(_QWORD *)v12 + 60i64) & 0x3FF));
  v14 = (UINT64)v6;
  v37 = v13 + 7232;
  do
  {
    v15 = *v6;
    LOBYTE(v16) = MiPteInShadowRange(v14);
    v17 = v16;
    v32 = v15;
    if( (v15 & 1) != 0 )
    {
      v34 = 0;
      v18.u.Long = 0i64;
      LOBYTE(v19) = MiPteInShadowRange((UINT64)&v32);
      v31 = v19;
      v20 = &MmGetPfnDb()[(v15 >> 12) & 0xFFFFFFFFFi64];
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&v20->u2, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( v20->u2._bf_0 < 0 );
      }
      v22 = (*(_BYTE *)(&v20->u3 + 1) & 0x10) == 0;
      v23 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)v20->u4._bf_0 >> 39) & 0x3FF));
      Partition = v23;
      if( v22 || (*(_DWORD *)(&v20->3 + 1) & 0x400i64) == 0 )
      {
        MiCaptureDirtyBitToPfn();
        v18.u.Long = v24.Long;
        v23 = Partition;
      }
      _InterlockedAnd64(&v20->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(CurrentIrql);
      if( v18.u.Long )
        MiReleasePageFileInfo(v23, v18, 0i64);
      v4 = HIDWORD(SpinCount);
      if( HIDWORD(SpinCount) != 2 || (v15 & 0x800) == 0 )
      {
        if( (v15 & 0x42) == 0 )
          goto LABEL_14;
        MiWriteValidPteNewProtection(v6, v15 & 0xFFFFFFFFFFFFFFBDui64);
        v29 = 1;
LABEL_13:
        MiInsertTbFlushEntry(&TbFlushList, v8, 1ui64, 0i64);
        goto LABEL_14;
      }
      v9 ^= (v9 ^ v15) & 0xFFFFFFFFF000i64;
      MiWriteValidPteNewProtection(v6, v9);
      if( ((MiFlags & 0x100) != 0 || (MiFlags & 0x200) != 0) && !MI_TIGHTER_PERMISSIONS((_MMPTE)v15, (_MMPTE)v9) )
        v26 = v34;
      else
        v26 = 1;
      if( (v15 & 0x42) != 0 )
        v29 = 1;
      if( v26 )
        goto LABEL_13;
    }
    else if( v4 == 2 && (v15 & 8) == 0 )
    {
      v27 = v15 | 8;
      v32 = v27;
      v28 = v27;
      if( v17 )
      {
        v28 = v27;
        if( (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v27 & 1) != 0 )
          v28 = v27 | 0x8000000000000000ui64;
      }
      *v6 = v28;
    }
LABEL_14:
    ++v6;
    v8 += 4096;
    v14 = (UINT64)v6;
  }
  while( (unsigned __int64)v6 <= v7 );
  MiFlushTbList(&TbFlushList);
  MiUnlockPageTableInternal(v37, v36);
  MiUnlockWorkingSetShared((_MMSUPPORT_INSTANCE *)v37, (unsigned __int8)v30[0]);
  return v29;
}

Referenced by:

CcFlushCachePriv
CcPurgeAndClearCacheSection
CcUnpinRepinnedBcb
CcZeroDataInCache
MmSetAddressRangeModified