MiDeleteClusterSection

INT64 __fastcall MiDeleteClusterSection(INT64 rcx0, INT64 a2){
  __int64 v3; 
  unsigned __int64 v4; 
  __int64 v5; 
  unsigned int v6; 
  unsigned __int64 v7; 
  unsigned int v8; 
  INT64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  char *v12; 
  UINT64 v13; 
  _MMPFN *PfnDb; 
  unsigned __int64 v15; 
  _MMPTE *v16; 
  unsigned __int64 v17; 
  UINT64 v18; 
  INT64 v19; 
  __int64 v20; 
  char v21; 
  unsigned int v22; 
  __int64 v23; 
  int v24; 
  unsigned int i; 
  unsigned int v26; 
  bool v27; 
  __int64 v28; 
  unsigned int v29; 
  unsigned int v30; 
  __int64 v31; 
  unsigned int v32; 
  bool v33; 
  char *v34; 
  __int64 v35; 
  UINT64 v36; 
  _MMPFN *v37; 
  char *v38; 
  __int64 v39; 
  UINT8 v40; 
  _QWORD *v41; 
  ULONG_PTR v43; 
  INT64 v44; 
  INT64 v45; 
  INT64 v46; 
  ULONG_PTR BugCheckParameter2; 
  _MI_PARTITION *Partition; 
  INT64 v49; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  INT64 a1[2]; 
  __int64 v52; 
  __int128 v53; 
  v52 = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v3 = -1i64;
  *(_OWORD *)a1 = 0i64;
  v4 = *(_QWORD *)(rcx0 + 40);
  v5 = v4 & 0xFFFFFFFFFi64;
  v6 = 0;
  v7 = 0i64;
  v8 = 0;
  Partition = *(_MI_PARTITION **)(qword_140C4E388 + 8 * ((v4 >> 39) & 0x3FF));
  while( 1 )
  {
    v9 = MI_READ_PTE_LOCK_FREE(a2 + 8i64 * v8);
    v10 = v9;
    if( !v9 || (v9 & 0x800) == 0 )
      return 0i64;
    if( qword_140C4DC80 )
    {
      if( (v9 & 0x10) != 0 )
        v10 = v9 & 0xFFFFFFFFFFFFFFEFui64;
      else
        v10 = ~qword_140C4DC80 & v9;
    }
    v11 = (v10 >> 12) & 0xFFFFFFFFFi64;
    if( ((*((_QWORD *)MmGetPfnDb() + 6 * v11 + 5) >> 50) & 1) == 0 )
      return 0i64;
    v12 = (char *)MmGetPfnDb() + 48 * v11;
    BugCheckParameter2 = (ULONG_PTR)v12;
    if( MiIsPfnFromSlabAllocation((INT64)v12) || v8 && v11 != v3 )
      return 0i64;
    ++v8;
    v3 = v11 + 1;
    if( v8 >= 0x10 )
    {
      v15 = v11 - 15;
      v49 = (INT64)PfnDb + 48 * v5;
      v16 = (_MMPTE *)(a2 + 120);
      v53 = 0i64;
      while( 1 )
      {
        v17 = 0x8000000000000000ui64;
        if( v11 == v15 )
        {
          v18 = (UINT64)PfnDb + 48 * v15;
          BugCheckParameter2 = v18;
        }
        else
        {
          MiTryLockLeafPage(v16, v13);
          v18 = BugCheckParameter2;
          if( !BugCheckParameter2 )
            goto LABEL_35;
          if( (char *)BugCheckParameter2 != v12 )
            goto LABEL_34;
        }
        if( (_MMPTE *)(v17 | *(_QWORD *)(v18 + 8)) != v16 )
        {
          v43 = MI_READ_PTE_LOCK_FREE((INT64)v16);
          KeBugCheckEx(0x1Au, 0x403ui64, (ULONG_PTR)v16, v43, *(_QWORD *)(v18 + 8));
        }
        if( (*(_BYTE *)(v18 + 34) & 7) == 6 )
          MiBadShareCount((_MMPFN *)v18);
        if( *(_WORD *)(v18 + 32)
          || (*(_BYTE *)(v18 + 35) & 0x40) != 0
          || MiIsPageOnBadList(v18)
          || MiIsPfnFromSlabAllocation(v19) )
        {
          break;
        }
        MiUnlinkPageFromList((_MMPFN *)v18, 0i64);
        if( ((*(_QWORD *)(v18 + 40) >> 60) & 7) == 3 )
          MiClearPfnImageVerified(v18, 12);
        MiReleasePageFileSpace(Partition, *(_QWORD *)(v18 + 16), 1i64);
        v20 = *(_QWORD *)(v18 + 16);
        if( (v20 & 4) != 0 )
        {
          v20 &= ~4ui64;
          *(_QWORD *)(v18 + 16) = v20;
        }
        if( (v20 & 2) != 0 )
          *(_QWORD *)(v18 + 16) = v20 & 0xFFFFFFFFFFFFFFFDui64;
        *(_BYTE *)(v18 + 35) &= 0xF8u;
        *(_QWORD *)(v18 + 40) &= 0x8FFFFFFFFFFFFFFFui64;
        ++*((_DWORD *)&v53 + ((unsigned __int64)*(unsigned __int8 *)(v18 + 34) >> 6));
        *(_QWORD *)(v18 + 40) &= ~0x8000000000000000ui64;
        *(_BYTE *)(v18 + 34) &= 0xC7u;
        *(_BYTE *)(v18 + 35) &= ~0x20u;
        v21 = *(_BYTE *)(v18 + 34) & 0xEF;
        *(_BYTE *)(v18 + 34) = v21;
        *(_BYTE *)(v18 + 34) = v21 & 0xF8 | 1;
        *(_QWORD *)(v18 + 8) = 0i64;
        *(_QWORD *)(v18 + 24) &= 0x8000000000000000ui64;
        *(_QWORD *)(v18 + 16) = 0i64;
        *(_QWORD *)v16 = ZeroPte;
        ++v7;
        --v11;
        v12 -= 48;
        v16 = (_MMPTE *)((char *)v16 - 8);
        if( v11 < v15 )
          goto LABEL_35;
        PfnDb = MmGetPfnDb();
      }
      if( v11 == v15 )
        goto LABEL_35;
LABEL_34:
      _InterlockedAnd64((volatile signed __int64 *)(v18 + 24), 0x7FFFFFFFFFFFFFFFui64);
LABEL_35:
      v22 = 0;
      LODWORD(v23) = 1;
      v24 = 0;
      for( i = 0; i < 4; i += 4 )
      {
        v26 = *((_DWORD *)&v53 + i);
        if( v26 && v22 )
          v24 = 1;
        v27 = v22 < v26;
        v28 = i + 1;
        v29 = i;
        if( v22 >= v26 )
          v26 = v22;
        if( !v27 )
          v29 = v23;
        v30 = *((_DWORD *)&v53 + v28);
        if( v30 && v26 )
          v24 = 1;
        if( v26 >= v30 )
          LODWORD(v28) = v29;
        if( v26 >= v30 )
          v30 = v26;
        v31 = i + 2;
        v32 = *((_DWORD *)&v53 + v31);
        if( v32 && v30 )
          v24 = 1;
        v33 = v30 < v32;
        v23 = i + 3;
        if( v30 >= v32 )
          v32 = v30;
        if( !v33 )
          LODWORD(v31) = v28;
        v22 = *((_DWORD *)&v53 + v23);
        if( v22 && v32 )
          v24 = 1;
        if( v32 >= v22 )
          LODWORD(v23) = v31;
        if( v32 >= v22 )
          v22 = v32;
      }
      if( v24 )
      {
        v34 = (char *)MmGetPfnDb() + 48 * v15;
        v35 = 16i64;
        do
        {
          if( (unsigned __int8)v34[34] >> 6 != (_DWORD)v23 )
            MiChangePageAttribute((INT64)v34, (unsigned int)v23, 1);
          v34 += 48;
          --v35;
        }
        while( v35 );
      }
      v36 = v15 + 15;
      v37 = MmGetPfnDb();
      v38 = (char *)v37 + 48 * v15 + 720;
      if( v7 == 16 )
      {
        a1[0] = v15;
        a1[1] = 0x200000001i64;
        LOBYTE(v52) = 2;
        v39 = *((_QWORD *)Partition + 2) + 4544i64 * (unsigned int)MI_NODE_FROM_PFN((INT64)v37 + 48 * v15 + 720);
        LODWORD(v46) = 1;
        LODWORD(v44) = 1;
        MiInitializeAllResidentPageBasePfns((UINT16 *)Partition, v15, 16i64, 2i64, v23, v44, v46);
        LODWORD(v45) = 1;
        MiCreateInitialLargeLeafPfns(v15, 16i64, 2i64, v23, *(_WORD *)Partition, v45);
        KeAcquireInStackQueuedSpinLockAtDpcLevel((UINT64 *)(v39 + 4328), &LockHandle, v40);
LABEL_73:
        v41 = v38 + 40;
        do
        {
          if( v36 == v15 )
            break;
          if( !v39 )
          {
            *v41 &= 0xFFFFFFF000000000ui64;
            MiInsertPageInFreeOrZeroedList(v36, 2ui64);
          }
          _InterlockedAnd64(v41 - 2, 0x7FFFFFFFFFFFFFFFui64);
          ++v6;
          --v36;
          v41 -= 6;
        }
        while( v6 < v7 );
        MiLockNestedPageAtDpcInline(v49);
        *(_QWORD *)(v49 + 24) ^= (*(_QWORD *)(v49 + 24) ^ (*(_QWORD *)(v49 + 24) - v7)) & 0x3FFFFFFFFFFFFFFFi64;
        _InterlockedAnd64((volatile signed __int64 *)(v49 + 24), 0x7FFFFFFFFFFFFFFFui64);
      }
      else
      {
        v39 = 0i64;
        if( v7 )
          goto LABEL_73;
      }
      if( v39 )
      {
        MiInsertLargePageInNodeList((INT64)a1);
        KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
        return 1i64;
      }
      return 0i64;
    }
  }
}

Referenced by:

MiDeleteSubsectionPages