MiRemoveMappedPtes

void __fastcall MiRemoveMappedPtes(__int64 a1, __int64 a2){
  int v2; 
  __int64 v3; 
  int v4; 
  unsigned __int64 v6; 
  INT64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  char *v10; 
  int v11; 
  volatile INT64 *v12; 
  UINT64 v13; 
  UINT8 v14; 
  _MI_PARTITION *v15; 
  __int64 v16; 
  UINT64 v17; 
  INT64 v18; 
  INT64 v19; 
  ULONG_PTR v20; 
  int v21; 
  __int64 v22; 
  BOOL v23; 
  KIRQL v24; 
  UINT64 v25; 
  INT64 v26; 
  INT64 v27; 
  int v28; 
  _SUBSECTION *SubsectionNode; 
  int v30; 
  __int64 *BugCheckParameter2; 
  UINT64 PteOffset; 
  CHAR a7[8]; 
  _MI_PARTITION *Partition; 
  volatile INT64 *a1a; 
  INT64 v36; 
  INT64 v37[2]; 
  __int128 v38; 
  UINT8 v40; 
  unsigned int v41; 
  __int64 v42; 
  v2 = *(_DWORD *)(a1 + 56);
  v3 = 0i64;
  v4 = 4;
  PteOffset = 0i64;
  v42 = 0i64;
  if( (v2 & 4) != 0 )
    v4 = 24;
  v6 = *(_QWORD *)(a1 + 88);
  v7 = **(_QWORD **)(a1 + 48);
  v41 = v4;
  v8 = *(_QWORD *)(a1 + 32) >> 12;
  BugCheckParameter2 = *(__int64 **)(a1 + 48);
  Partition = *(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a2 + 174));
  v36 = v7;
  v9 = (unsigned __int64)MmGetPteBase() + ((v6 >> 9) & 0x7FFFFFFFF8i64);
  *(_OWORD *)v37 = 0i64;
  v10 = 0i64;
  v38 = 0i64;
  v11 = *(_DWORD *)(v7 + 56);
  if( (v11 & 0x400) != 0 )
    v12 = (volatile INT64 *)&MiSystemPartition;
  else
    v12 = *(volatile INT64 **)(qword_140C4E388 + 8i64 * (*(_WORD *)(v7 + 60) & 0x3FF));
  a1a = v12;
  if( (v11 & 0x420) != 0 )
  {
    v13 = 0i64;
    *(_QWORD *)a7 = 0i64;
  }
  else
  {
    v13 = *(_QWORD *)(a1 + 24) << 12;
    BugCheckParameter2 = (__int64 *)MiOffsetToProtos((_CONTROL_AREA *)v7, v13, &PteOffset);
    *(_QWORD *)a7 = v8 + PteOffset;
  }
  if( (v2 & 0x18) != 24 )
  {
    SubsectionNode = MiLocateSubsectionNode((_CONTROL_AREA *)v7, v13 + (v8 << 12) - 1, 0i64);
    v20 = (ULONG_PTR)BugCheckParameter2;
    MiDecrementLargeSubsections(BugCheckParameter2, (__int64)SubsectionNode);
    v19 = 0i64;
    goto LABEL_23;
  }
  v40 = MiLockWorkingSetShared(a2);
  v14 = v40;
  if( !v8 )
    goto LABEL_20;
  v15 = Partition;
  v16 = 0i64;
  do
  {
    if( !v10 || (v9 & 0xFFF) == 0 )
    {
      v16 += MiTerminateWsleCluster((INT64)v37);
      if( v10 )
        MiUnlockPageTableInternal(a2, (UINT64)v10);
      v10 = (char *)MmGetPteBase() + ((v9 >> 9) & 0x7FFFFFFFF8i64);
      MiLockPageTableInternal(a2, (UINT64)v10, 0i64);
    }
    v17 = *(_QWORD *)v9;
    if( *(_QWORD *)v9 )
    {
      if( (v17 & 1) != 0 )
      {
        if( (_DWORD)dword_140C4E568 )
          MI_WSLE_LOG_ACCESS(a2, v9);
        MiAppendWsleCluster((INT64)v37, a2, (UINT64 *)v9);
      }
      else
      {
        if( (v17 & 0x400) != 0 )
        {
          v18 = ZeroPte;
        }
        else if( (v17 & 0x800) != 0 )
        {
          v30 = MiTryDeleteTransitionPte((UINT64 *)v9);
          if( v30 == 1 )
            continue;
          if( v30 == 3 )
            ++v16;
          v18 = ZeroPte;
        }
        else
        {
          MiReleasePageFileSpace(v15, v17, 1i64);
          v18 = ZeroPte;
        }
        *(_QWORD *)v9 = v18;
        v14 = v40;
      }
    }
    v9 += 8i64;
    --v8;
    if( (v9 & 0x78) == 0 )
    {
      if( MiWorkingSetIsContended(a2)
        || (MiPageTableLockIsContended(a2, (UINT64)v10, v26, v27, (INT64)BugCheckParameter2, PteOffset, a7[0]), v28)
        || KeShouldYieldProcessor() )
      {
        v16 += MiTerminateWsleCluster((INT64)v37);
        MiUnlockPageTableInternal(a2, (UINT64)v10);
        MiUnlockWorkingSetShared(a2, v14);
        v10 = 0i64;
        MiLockWorkingSetShared(a2);
      }
    }
  }
  while( v8 );
  v7 = v36;
  v42 = v16;
LABEL_20:
  v19 = MiTerminateWsleCluster((INT64)v37) + v42;
  if( v10 )
    MiUnlockPageTableInternal(a2, (UINT64)v10);
  MiUnlockWorkingSetShared(a2, v14);
  v20 = (ULONG_PTR)BugCheckParameter2;
LABEL_23:
  v21 = *(_DWORD *)(v7 + 56);
  if( (v21 & 0x20) != 0 || (v21 & 0x400) != 0 )
  {
    v22 = a1;
    v20 = 0i64;
    if( (v21 & 0x20) != 0 && (*(_BYTE *)(a1 + 56) & 4) != 0 )
      MiReturnCrossPartitionControlAreaCharges(v7);
  }
  else
  {
    v22 = a1;
  }
  v23 = *(_QWORD *)(v7 + 64) != 0i64;
  v24 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v7 + 72));
  if( v20 )
    v3 = MiRemoveViewsFromSection(v20, *(unsigned __int64 *)a7, v41);
  --*(_QWORD *)(v7 + 48);
  --*(_QWORD *)(v7 + 40);
  MiCheckControlArea((_CONTROL_AREA *)v7, v24);
  v25 = *(_QWORD *)(v22 + 40);
  if( v25 )
  {
    if( v19 )
      v25 -= v19;
    if( v25 )
      MiReturnCommit(Partition, v25);
  }
  if( v3 )
    MiReturnCrossPartitionSectionCharges(a1a, v23, v3);
}

Referenced by:

MiRemoveFromSystemSpace