MiDeleteClusterSection

NTSTATUS __stdcall MiDeleteClusterSection(_MMPFN *Pfn1, _MMPTE *ProtoPte){
  __int64 v3; 
  unsigned __int64 EntireField; 
  __int64 v5; 
  unsigned int v6; 
  unsigned __int64 v7; 
  unsigned int v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  _MMPFN *v12; 
  int v13; 
  UINT64 v14; 
  _MMPFN *PfnDb; 
  unsigned __int64 v16; 
  _MMPTE *v17; 
  unsigned __int64 v18; 
  INT64 v19; 
  int v20; 
  INT64 v21; 
  int v22; 
  __int64 v23; 
  char v24; 
  unsigned __int64 Long; 
  int v26; 
  INT64 v27; 
  __int64 v28; 
  int v29; 
  UINT64 v30; 
  unsigned int v31; 
  bool v32; 
  __int64 v33; 
  int v34; 
  unsigned int v35; 
  __int64 v36; 
  unsigned int v37; 
  bool v38; 
  _MMPFN *v39; 
  __int64 v40; 
  UINT64 v41; 
  _MMPFN *v42; 
  _MMPFN *v43; 
  __int64 v44; 
  union {$8D9ED47C9F2F2CD645B633E301950288 __s0;unsigned __int64 EntireField;} *p_u4; 
  PVOID v47; 
  UINT64 v48; 
  INT64 v49; 
  INT64 v50; 
  INT64 v51; 
  INT64 v52; 
  _MI_PARTITION *Partition; 
  _MMPFN *Pfn1a; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  __int128 v56; 
  __int64 v57; 
  __int128 v58; 

  v57 = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v3 = -1i64;
  v56 = 0i64;
  EntireField = Pfn1->u4.EntireField;
  v5 = EntireField & 0xFFFFFFFFFi64;
  v6 = 0;
  v7 = 0i64;
  v8 = 0;
  Partition = *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8 * ((EntireField >> 39) & 0x3FF));
  while( 1 )
  {
    LODWORD(v9) = MI_READ_PTE_LOCK_FREE((INT64)&ProtoPte[v8]);
    v10 = v9;
    if( !v9 || (v9 & 0x800) == 0 )
      return 0;
    if( *(&stru_140C4DB30 + 42) )
    {
      if( (v9 & 0x10) != 0 )
        v10 = v9 & 0xFFFFFFFFFFFFFFEFui64;
      else
        v10 = ~*(&stru_140C4DB30 + 42) & v9;
    }
    v11 = (v10 >> 12) & 0xFFFFFFFFFi64;
    if( (((unsigned __int64)MmGetPfnDb()[v11].u4._bf_0 >> 50) & 1) == 0 )
      return 0;
    v12 = &MmGetPfnDb()[v11];
    v52 = (INT64)v12;
    LOBYTE(v13) = MiIsPfnFromSlabAllocation((INT64)v12);
    if( v13 || v8 && v11 != v3 )
      return 0;
    ++v8;
    v3 = v11 + 1;
    if( v8 >= 0x10 )
    {
      v16 = v11 - 15;
      Pfn1a = &PfnDb[v5];
      v17 = ProtoPte + 15;
      v58 = 0i64;
      while( 1 )
      {
        v18 = 0x8000000000000000ui64;
        if( v11 == v16 )
        {
          v19 = (INT64)&PfnDb[v16];
          v52 = v19;
        }
        else
        {
          MiTryLockLeafPage(v17, v14);
          v19 = v52;
          if( !v52 )
            goto LABEL_39;
          if( (_MMPFN *)v52 != v12 )
            goto LABEL_38;
        }
        if( (_MMPTE *)(v18 | *(_QWORD *)(v19 + 8)) != v17 )
        {
          LODWORD(v47) = MI_READ_PTE_LOCK_FREE((INT64)v17);
          KeBugCheckEx(0x1Au, (PVOID)0x403, v17, v47, *(PVOID *)(v19 + 8));
        }
        if( (*(_BYTE *)(v19 + 34) & 7) == 6 )
          MiBadShareCount();
        if( *(_WORD *)(v19 + 32) )
          break;
        if( (*(_BYTE *)(v19 + 35) & 0x40) != 0 )
          break;
        LOBYTE(v20) = MiIsPageOnBadList(v19);
        if( v20 )
          break;
        LOBYTE(v22) = MiIsPfnFromSlabAllocation(v21);
        if( v22 )
          break;
        MiUnlinkPageFromList((_MMPFN *)v19, 0i64);
        if( ((*(_QWORD *)(v19 + 40) >> 60) & 7) == 3 )
          MiClearPfnImageVerified((PVOID)v19, 0xCui64);
        MiReleasePageFileSpace(Partition, *(_MMPTE *)(v19 + 16), 1ui64);
        v23 = *(_QWORD *)(v19 + 16);
        if( (v23 & 4) != 0 )
        {
          v23 &= ~4ui64;
          *(_QWORD *)(v19 + 16) = v23;
        }
        if( (v23 & 2) != 0 )
          *(_QWORD *)(v19 + 16) = v23 & 0xFFFFFFFFFFFFFFFDui64;
        *(_BYTE *)(v19 + 35) &= 0xF8u;
        *(_QWORD *)(v19 + 40) &= 0x8FFFFFFFFFFFFFFFui64;
        ++*((_DWORD *)&v58 + ((unsigned __int64)*(unsigned __int8 *)(v19 + 34) >> 6));
        *(_QWORD *)(v19 + 40) &= ~0x8000000000000000ui64;
        *(_BYTE *)(v19 + 34) &= 0xC7u;
        *(_BYTE *)(v19 + 35) &= ~0x20u;
        v24 = *(_BYTE *)(v19 + 34) & 0xEF;
        *(_BYTE *)(v19 + 34) = v24;
        *(_BYTE *)(v19 + 34) = v24 & 0xF8 | 1;
        *(_QWORD *)(v19 + 8) = 0i64;
        *(_QWORD *)(v19 + 24) &= 0x8000000000000000ui64;
        *(_QWORD *)(v19 + 16) = 0i64;
        Long = ZeroPte.u.Long;
        LOBYTE(v26) = MiPteInShadowRange((UINT64)v17);
        if( v26 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
          Long = ZeroPte.u.Long | 0x8000000000000000ui64;
        v17->u.Long = Long;
        ++v7;
        --v11;
        --v12;
        --v17;
        if( v11 < v16 )
          goto LABEL_39;
        PfnDb = MmGetPfnDb();
      }
      if( v11 == v16 )
        goto LABEL_39;
LABEL_38:
      _InterlockedAnd64((volatile signed __int64 *)(v19 + 24), 0x7FFFFFFFFFFFFFFFui64);
LABEL_39:
      LODWORD(v27) = 0;
      LODWORD(v28) = 1;
      v29 = 0;
      LODWORD(v30) = 0;
      do
      {
        v31 = *((_DWORD *)&v58 + (unsigned int)v30);
        if( v31 && (_DWORD)v27 )
          v29 = 1;
        v32 = (unsigned int)v27 < v31;
        v33 = (unsigned int)(v30 + 1);
        v34 = v30;
        if( (unsigned int)v27 >= v31 )
          v31 = v27;
        if( !v32 )
          v34 = v28;
        v35 = *((_DWORD *)&v58 + v33);
        if( v35 && v31 )
          v29 = 1;
        if( v31 >= v35 )
          LODWORD(v33) = v34;
        if( v31 >= v35 )
          v35 = v31;
        v36 = (unsigned int)(v30 + 2);
        v37 = *((_DWORD *)&v58 + v36);
        if( v37 && v35 )
          v29 = 1;
        v38 = v35 < v37;
        v28 = (unsigned int)(v30 + 3);
        if( v35 >= v37 )
          v37 = v35;
        if( !v38 )
          LODWORD(v36) = v33;
        v27 = *((unsigned int *)&v58 + v28);
        if( (_DWORD)v27 && v37 )
          v29 = 1;
        if( v37 >= (unsigned int)v27 )
          LODWORD(v28) = v36;
        v30 = (unsigned int)(v30 + 4);
        if( v37 >= (unsigned int)v27 )
          v27 = v37;
      }
      while( (unsigned int)v30 < 4 );
      if( v29 )
      {
        v39 = &MmGetPfnDb()[v16];
        v40 = 16i64;
        do
        {
          if( *((unsigned __int8 *)&v39->u3 + 2) >> 6 != (_DWORD)v28 )
            MiChangePageAttribute(v39, (_MI_PFN_CACHE_ATTRIBUTE)v28, 1ui64);
          ++v39;
          --v40;
        }
        while( v40 );
      }
      v41 = v16 + 15;
      v42 = MmGetPfnDb();
      v43 = &v42[v16 + 15];
      if( v7 == 16 )
      {
        *(_QWORD *)&v56 = v16;
        *((_QWORD *)&v56 + 1) = 0x200000001i64;
        LOBYTE(v57) = 2;
        v44 = (__int64)&Partition->Core.NodeInformation[MI_NODE_FROM_PFN((INT64)&v42[v16 + 15])];
        LODWORD(v51) = 1;
        LODWORD(v49) = 1;
        MiInitializeAllResidentPageBasePfns(&Partition->Core.PartitionId, v16, 16i64, 2i64, v28, v49, v51);
        LODWORD(v50) = 1;
        MiCreateInitialLargeLeafPfns(v16, 16i64, 2i64, v28, Partition->Core.PartitionId, v50);
        KeAcquireInStackQueuedSpinLockAtDpcLevel((PKSPIN_LOCK)(v44 + 4328), &LockHandle);
LABEL_77:
        p_u4 = &v43->u4;
        do
        {
          if( v41 == v16 )
            break;
          if( !v44 )
          {
            p_u4->_bf_0 &= 0xFFFFFFF000000000ui64;
            MiInsertPageInFreeOrZeroedList(v41, 2ui64, v27, v30, v48, v49);
          }
          _InterlockedAnd64(&p_u4[-2]._bf_0, 0x7FFFFFFFFFFFFFFFui64);
          ++v6;
          --v41;
          p_u4 -= 6;
        }
        while( v6 < v7 );
        MiLockNestedPageAtDpcInline(Pfn1a);
        Pfn1a->u2._bf_0 ^= (Pfn1a->u2._bf_0 ^ (Pfn1a->u2._bf_0 - v7)) & 0x3FFFFFFFFFFFFFFFi64;
        _InterlockedAnd64(&Pfn1a->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      }
      else
      {
        v44 = 0i64;
        if( v7 )
          goto LABEL_77;
      }
      if( v44 )
      {
        MiInsertLargePageInNodeList((__int64)&v56);
        KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
        return 1;
      }
      return 0;
    }
  }
}

Referenced by:

MiDeleteSubsectionPages