MiDeleteValidSystemPage

VOID __stdcall MiDeleteValidSystemPage(_MMPTE *PointerPte, UINT64 Flags, _MI_DELETE_VA_INFO *DeleteInfo){
  wchar_t *v3; 
  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;} v4; 
  __int64 v5; 
  _MMPTE *Pml4eBase; 
  UINT64 PxeUserLimit; 
  __int64 bf_0_high; 
  _MI_PARTITION *v10; 
  _MMPFN *PfnDb; 
  __int64 v12; 
  unsigned __int64 EntireField; 
  INT64 v14; 
  int v15; 
  __int64 v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  int v20; 
  __int64 v21; 
  __int64 v22; 
  _MMPFN *v23; 
  int v24; 
  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;} v25; 
  __int64 v26; 
  __int64 v27; 
  char v28; 
  unsigned __int64 v29; 
  int v30; 
  unsigned int v31; 
  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;} v32; 
  INT64 v33; 
  int v34; 
  unsigned __int64 Long; 
  __int64 v36; 
  __int64 v37; 
  _MI_PAGE_DELETE_RESULT v38; 
  __int64 bf_0; 
  __int64 v40; 
  UINT64 v41; 
  __int64 v42; 
  _MI_PARTITION *Partition; 
  unsigned __int64 v44; 
  UINT64 SpinCount; 
  int v47; 
  wchar_t *v48; 

  v48 = v3;
  v47 = (int)DeleteInfo;
  v4.Long = ZeroPte.u.Long;
  v5 = *(_QWORD *)Flags;
  v44 = 0i64;
  Pml4eBase = MmGetPml4eBase();
  PxeUserLimit = (UINT64)MmGetPxeUserLimit();
  if( Flags >= (unsigned __int64)Pml4eBase && Flags <= PxeUserLimit )
    PxeUserLimit = (UINT64)MmGetPxeUserLimit();
  bf_0_high = HIWORD(PointerPte[21].u.TimeStamp._bf_0);
  v42 = v5;
  v10 = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * bf_0_high);
  if( &v42 < (__int64 *)Pml4eBase || (unsigned __int64)&v42 > PxeUserLimit )
    PxeUserLimit = v5;
  PfnDb = MmGetPfnDb();
  v12 = (PxeUserLimit >> 12) & 0xFFFFFFFFFi64;
  EntireField = PfnDb[v12].u4.EntireField;
  v14 = (INT64)&PfnDb[v12];
  Partition = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * ((EntireField >> 39) & 0x3FF));
  LOBYTE(v15) = MI_PFN_IS_PROTO((_UNICODE_STRING *)&PfnDb[v12], (_UNICODE_STRING *)EntireField, (UINT8)PfnDb, v3);
  if( v15 )
  {
    if( (v16 & 0x1000000000i64) == 0 )
    {
      v21 = *(_QWORD *)(v14 + 8);
      if( v21 > 0 )
        v44 = v21 | 0x8000000000000000ui64;
    }
    LODWORD(v22) = MiGetContainingPageTable(Flags);
    v23 = &MmGetPfnDb()[v22];
    LODWORD(SpinCount) = v24;
    while( _interlockedbittestandset64((volatile signed __int32 *)(v14 + 24), 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( *(__int64 *)(v14 + 24) < 0 );
    }
    if( (v5 & 0x42) != 0 )
    {
      MiCaptureDirtyBitToPfn();
      v4.Long = v25.Long;
    }
    v26 = *(_QWORD *)(v14 + 16);
    if( (v26 & 0x400) == 0 || (v5 & 0x200) != 0 )
    {
      v27 = (__int64)v48;
      v28 = v47;
      ++*((_QWORD *)v48 + 3);
    }
    else
    {
      if( *(&stru_140C4DB30 + 42) && (v26 & 0x10) == 0 )
        v26 &= ~*(&stru_140C4DB30 + 42);
      v27 = (__int64)v48;
      v28 = v47;
      if( (*(_DWORD *)(*(_QWORD *)(v26 >> 16) + 56i64) & 0x820) == 2080 )
        ++*((_QWORD *)v48 + 3);
    }
LABEL_45:
    if( (v28 & 0x10) != 0 )
      *(_BYTE *)(v14 + 35) &= ~8u;
    Long = ZeroPte.u.Long;
    if( Flags >= (unsigned __int64)MmGetPml4eBase()
      && Flags <= (unsigned __int64)MmGetPxeUserLimit()
      && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0
      && (ZeroPte.u.Long & 1) != 0 )
    {
      Long = ZeroPte.u.Long | 0x8000000000000000ui64;
    }
    *(_QWORD *)Flags = Long;
    if( (*(_BYTE *)(v14 + 34) & 7) != 6 )
      MiBadShareCount();
    v36 = *(_QWORD *)(v14 + 24);
    v37 = (v36 & 0x3FFFFFFFFFFFFFFFi64) - 1;
    *(_QWORD *)(v14 + 24) = v36 ^ (v37 ^ v36) & 0x3FFFFFFFFFFFFFFFi64;
    if( (v36 & 0x3FFFFFFFFFFFFFFFi64) == 1 )
      v38 = MiPfnShareCountIsZero((_MMPFN *)v14, (_MMPFN *)v37);
    else
      v38 = PageStillShared;
    _InterlockedAnd64((volatile signed __int64 *)(v14 + 24), 0x7FFFFFFFFFFFFFFFui64);
    HIDWORD(v41) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&v23->u2, 0x3Fui64) )
    {
      do
        KeYieldProcessorEx((UINT64 *)((char *)&v41 + 4));
      while( v23->u2._bf_0 < 0 );
    }
    if( (*(_BYTE *)(&v23->u3 + 1) & 7) != 6 )
      MiBadShareCount();
    bf_0 = v23->u2._bf_0;
    v40 = (bf_0 & 0x3FFFFFFFFFFFFFFFi64) - 1;
    v23->u2._bf_0 = bf_0 ^ (v40 ^ bf_0) & 0x3FFFFFFFFFFFFFFFi64;
    if( (bf_0 & 0x3FFFFFFFFFFFFFFFi64) == 1 )
      MiPfnShareCountIsZero(v23, (_MMPFN *)v40);
    _InterlockedAnd64(&v23->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    if( v4.Long )
      MiReleasePageFileInfo(Partition, (_MMPTE)v4.Long, 1ui64);
    if( v44 )
      v38 = MiDecrementCombinedPte(PointerPte);
    if( v38 == PageStillReferenced )
      ++*(_QWORD *)(v27 + 8);
    return;
  }
  if( v14 != *(&stru_140C4DB30 + 494) )
  {
    if( (*(_QWORD *)(v14 + 8) | 0x8000000000000000ui64) != Flags )
      KeBugCheckEx(0x1Au, (PVOID)0x404, (PVOID)Flags, (PVOID)v5, *(PVOID *)(v14 + 8));
    ++*(_QWORD *)(v18 + 24);
    v23 = (_MMPFN *)(v17 + 48 * (v19 & v16));
    LODWORD(v41) = v20;
    while( _interlockedbittestandset64((volatile signed __int32 *)(v14 + 24), 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&v41);
      while( *(__int64 *)(v14 + 24) < 0 );
    }
    *(_QWORD *)(v14 + 24) |= 0x4000000000000000ui64;
    if( ((*(_QWORD *)(v14 + 40) >> 60) & 7) == 2 )
    {
      MiCaptureDirtyBitToPfn();
      v31 = *(unsigned __int16 *)(v14 + 32);
      v4.Long = v32.Long;
      if( (!(_WORD)v31 || v31 > 2 && (v31 != 3 || (*(_BYTE *)(v14 + 34) & 8) == 0)) && Partition != v10 )
        KeBugCheckEx(0x1Au, (PVOID)0x406, (PVOID)Flags, (PVOID)(v12 * 48 / 48), (PVOID)*(unsigned __int16 *)(v14 + 32));
      *(_QWORD *)(v14 + 40) &= 0x8FFFFFFFFFFFFFFFui64;
    }
    v28 = v47;
    if( (v47 & 4) != 0 )
    {
      MiIsPfnSystemCharged(v14);
      if( v34 )
      {
        MiDriverPageIsDangling(v33);
        *(_BYTE *)(v14 + 35) &= ~0x20u;
      }
    }
    v27 = (__int64)v48;
    goto LABEL_45;
  }
  v29 = ZeroPte.u.Long;
  LOBYTE(v30) = MiPteInShadowRange(Flags);
  if( v30 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
    v29 = ZeroPte.u.Long | 0x8000000000000000ui64;
  *(_QWORD *)Flags = v29;
}

Referenced by:

MiDeleteKernelStack
MiDeleteSystemPagableVm
MiTerminateWsleCluster