MiDeletePteRun

INT64 __fastcall MiDeletePteRun(__int64 a1, __int64 a2){
  _QWORD *v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  __int64 v6; 
  int v7; 
  unsigned __int64 PteBase; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  int v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  ULONG_PTR v14; 
  __int64 v15; 
  _MMPTE *Pml4eBase; 
  __int64 v17; 
  _MMPTE *PxeUserLimit; 
  int v19; 
  unsigned int v20; 
  char *v21; 
  UINT64 v22; 
  ULONG_PTR v23; 
  __int64 v24; 
  char *v25; 
  WCHAR *v26; 
  int v27; 
  int v28; 
  _MMPTE *v29; 
  int v30; 
  __int64 v31; 
  __int64 v32; 
  _MMPTE *v33; 
  ULONG_PTR v34; 
  _MMPTE *v35; 
  unsigned __int64 v36; 
  char *v37; 
  UINT8 v38; 
  __int64 v39; 
  char v40; 
  unsigned __int64 v41; 
  INT64 v42; 
  INT64 v43; 
  _QWORD *v44; 
  __int64 v45; 
  signed __int8 v46; 
  UNICODE_STRING *v47; 
  char v48; 
  UINT64 v49; 
  int v50; 
  __int64 v51; 
  int v52; 
  __int64 v53; 
  int v54; 
  unsigned __int64 v55; 
  INT64 v56; 
  WCHAR *v57; 
  unsigned int v58; 
  unsigned __int64 v59; 
  unsigned __int64 v60; 
  unsigned __int64 v61; 
  int v62; 
  int v63; 
  UINT64 ValidPte; 
  struct _KPRCB *CurrentPrcb; 
  UINT64 v66; 
  __int64 v67; 
  unsigned __int64 UltraMapping; 
  _MMPTE *v69; 
  _MMPTE *v70; 
  _MMPTE *v71; 
  __int64 v72; 
  __int64 v73; 
  __int64 *v74; 
  __int64 v75; 
  UNICODE_STRING *v76; 
  char v77; 
  char v78; 
  int v79; 
  char v80; 
  INT64 v81; 
  INT64 v82; 
  __int64 v83; 
  _MI_PARTITION *v84; 
  int v85; 
  __int64 v86; 
  __int64 v87; 
  char v88; 
  UINT64 v89; 
  unsigned __int64 v90; 
  INT64 v91; 
  unsigned __int64 v92; 
  int v93; 
  INT16 v94; 
  INT64 result; 
  ULONG_PTR v96; 
  ULONG_PTR BugCheckParameter4; 
  INT64 v98; 
  ULONG_PTR v99; 
  __int64 a8; 
  _QWORD *a9; 
  INT64 a10; 
  UINT64 v103; 
  INT64 a12; 
  int v105; 
  __int16 v106; 
  ULONG_PTR BugCheckParameter3; 
  _MMPTE *v108; 
  int v109; 
  ULONG_PTR BugCheckParameter2; 
  INT64 v111; 
  int v112; 
  int v113; 
  _MI_PARTITION *Partition; 
  UINT64 SpinCount; 
  UINT64 v116; 
  unsigned __int64 v117; 
  unsigned __int64 v118; 
  INT64 v119; 
  char *v120; 
  _MI_PARTITION *v121; 
  ULONG_PTR v122; 
  __int64 v123; 
  ULONG_PTR v124; 
  unsigned __int64 v125; 
  unsigned __int64 v126; 
  __int64 v127; 
  UINT64 a2a[2]; 
  __int64 v129; 
  UINT8 v130[16]; 
  __int128 v131[8]; 
  EVENT_DATA_DESCRIPTOR EventData; 
  v2 = *(_QWORD **)(a2 + 16);
  v3 = *(_QWORD *)a2;
  v4 = *(_QWORD *)(a2 + 8);
  v129 = 0i64;
  LOBYTE(a10) = *(_BYTE *)(a2 + 108);
  v6 = *(_QWORD *)(a2 + 88);
  v7 = *(_DWORD *)(a2 + 104);
  v123 = v6;
  PteBase = (unsigned __int64)MmGetPteBase();
  a8 = a1;
  *(_OWORD *)a2a = 0i64;
  a9 = v2;
  *(_OWORD *)v130 = 0i64;
  v125 = v3;
  memset(v131, 0, sizeof(v131));
  v126 = v4;
  v106 = v7;
  v9 = PteBase << 25;
  a12 = PteBase << 25;
  v10 = (__int64)((v3 << 25) - (PteBase << 25)) >> 16;
  if( v10 < PteBase || (v11 = 1, v10 > (unsigned __int64)MmGetPteLimit()) )
    v11 = 0;
  v12 = a1 - 1664;
  v13 = 0i64;
  if( (*(_BYTE *)(a1 + 184) & 7) != 0 )
    v12 = 0i64;
  v105 = v11;
  v14 = 0i64;
  v103 = v12;
  v121 = *(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a1 + 174));
  v109 = 0;
  LODWORD(v99) = 0;
  Partition = 0i64;
  v122 = 0i64;
  if( v3 <= v4 )
  {
    v15 = a8;
    Pml4eBase = MmGetPml4eBase();
    while( 1 )
    {
      v17 = *(_QWORD *)v3;
      PxeUserLimit = MmGetPxeUserLimit();
      if( v3 >= (unsigned __int64)Pml4eBase && v3 <= (unsigned __int64)PxeUserLimit )
        LOBYTE(v7) = v106;
      if( v17 )
      {
        v19 = v7 & 0x80;
        v113 = v19;
        if( (v7 & 0x80) != 0 && (v3 < (unsigned __int64)Pml4eBase || v3 > (unsigned __int64)MmGetPml4eLimit()) )
        {
          v13 = (unsigned int)(v13 + 1);
          LODWORD(v99) = v13;
          if( !v14 )
          {
            v117 = *(_QWORD *)((char *)MmGetPdeBase() + ((((__int64)((v3 << 25) - v9) >> 16) & 0xFFFFFFE00000ui64) >> 18));
            v9 = (v117 >> 12) & 0xFFFFFFFFFi64;
            v122 = (ULONG_PTR)MmGetPfnDb() + 48 * v9;
          }
        }
        v20 = v13;
        if( (v17 & 0x400) != 0 )
        {
          LODWORD(v21) = 0;
          v108 = 0i64;
          BugCheckParameter2 = 0i64;
          BugCheckParameter3 = v17 & 0xFFFFFFFFFFFFFBFEui64 | 1;
          v22 = 0i64;
          v124 = 0i64;
          v23 = (BugCheckParameter3 >> 12) & 0xFFFFFFFFFi64;
          v24 = 48 * v23;
          v127 = 48 * v23;
          if( (*((_QWORD *)MmGetPfnDb() + 6 * v23 + 5) & 0x4000000000000i64) == 0 )
            goto LABEL_192;
          v21 = (char *)MmGetPfnDb() + v24;
          if( (v106 & 0x60) != 0 && !v11 )
          {
            MiDeleteBatch(v130);
            if( !MiIsPfnLocked((INT64)v21) )
              MiShowBadMapper(v23, 4ui64);
            if( (v106 & 0x40) != 0 )
              MiDoubleUnlockMdlPage((UINT64)v21);
            v25 = (char *)MmGetPfnDb() + 48 * MiGetContainingPageTable(v3);
            v27 = 4;
            LODWORD(v21) = 0;
            v28 = 0;
            goto LABEL_170;
          }
          if( !v21 )
          {
LABEL_192:
            MiDeleteBatch(v130);
            MiDereferenceIoPages(1i64, v23, 1i64);
            v25 = (char *)MmGetPfnDb() + 48 * MiGetContainingPageTable(v3);
            v27 = 4;
            v28 = (int)v21;
            goto LABEL_170;
          }
          if( (*(_BYTE *)(a8 + 184) & 7) == 0
            && !v11
            && ((BugCheckParameter3 >> 12) & 0xF) == 0
            && ((__int64)(v126 - v3) >> 3) + 1 >= 16
            && (unsigned int)MiDeleteClusterPage(v3, v130) == 1 )
          {
            v15 = a8;
            v13 = v20 + 15;
            v3 += 120i64;
            if( !v19 )
              v13 = v20;
            Pml4eBase = MmGetPml4eBase();
            LODWORD(v99) = v13;
LABEL_232:
            v2 = a9;
LABEL_233:
            v9 = a12;
            goto LABEL_234;
          }
          v29 = (_MMPTE *)(*((_QWORD *)v21 + 1) | 0x8000000000000000ui64);
          LOBYTE(v30) = MI_PFN_IS_PROTO((UNICODE_STRING *)v21, *((UNICODE_STRING **)v21 + 1), v9, (PWCHAR)v13);
          if( v30 )
          {
            if( (*((_QWORD *)v21 + 5) & 0x1000000000i64) != 0 || v31 <= 0 )
            {
              v35 = MmGetPteBase();
              if( v3 <= (unsigned __int64)v35 + 0x3FFFFFFF78i64
                && v3 >= (unsigned __int64)v35
                && *(_QWORD *)(v32 + 1264) )
              {
                v124 = (ULONG_PTR)v29;
                BugCheckParameter2 = (ULONG_PTR)MiLocateCloneAddress(v32, (unsigned __int64)v29);
                v34 = BugCheckParameter2;
                if( BugCheckParameter2 )
                  a9[1] += MiDeleteBatch(v130);
              }
              else
              {
                v34 = 0i64;
              }
              v33 = 0i64;
            }
            else
            {
              v108 = v29;
              v33 = v29;
              v34 = 0i64;
              a9[1] += MiDeleteBatch(v130);
            }
            v26 = (WCHAR *)MmGetPml4eBase();
            v118 = *(_QWORD *)((char *)MmGetPteBase() + ((v3 >> 9) & 0x7FFFFFFFF8i64));
            v36 = (v118 >> 12) & 0xFFFFFFFFFi64;
            v37 = (char *)MmGetPfnDb() + 48 * v36;
            v120 = v37;
            if( !v130[0] )
              goto LABEL_52;
            if( v37 != *(char **)&v130[8]
              || *(_MI_PARTITION **)(qword_140C4E388 + 8 * ((*((_QWORD *)v21 + 5) >> 39) & 0x3FFi64)) != v121
              || _interlockedbittestandset64((volatile signed __int32 *)v21 + 6, 0x3Fui64) )
            {
              a9[1] += MiDeleteBatch(v130);
            }
            v38 = v130[0];
            if( !v130[0] )
            {
LABEL_52:
              *(_QWORD *)&v130[8] = v37;
              LODWORD(SpinCount) = 0;
              while( _interlockedbittestandset64((volatile signed __int32 *)v21 + 6, 0x3Fui64) )
              {
                do
                  KeYieldProcessorEx(&SpinCount);
                while( *((__int64 *)v21 + 3) < 0 );
              }
              v38 = v130[0];
            }
            v39 = a8;
            if( (*(_BYTE *)(a8 + 184) & 7) == 0 )
            {
              v40 = v21[34];
              if( (v40 & 7) == 6
                && (*((_DWORD *)v21 + 4) & 0x400i64) == 0
                && ((BugCheckParameter3 & 0x42) != 0 || (v40 & 0x10) != 0)
                && !v33
                && !v34 )
              {
                *((_QWORD *)v131 + v38) = BugCheckParameter3;
                if( !v130[0] )
                  Partition = *(_MI_PARTITION **)(qword_140C4E388 + 8 * ((*((_QWORD *)v21 + 5) >> 39) & 0x3FFi64));
                v41 = ZeroPte;
                Pml4eBase = MmGetPml4eBase();
                if( v3 >= (unsigned __int64)Pml4eBase
                  && v3 <= (unsigned __int64)MmGetPxeUserLimit()
                  && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0
                  && (ZeroPte & 1) != 0 )
                {
                  v41 = ZeroPte | 0x8000000000000000ui64;
                }
                *(_QWORD *)v3 = v41;
                if( ++v130[0] == 16 )
                {
                  v42 = MiDeleteBatch(v130);
                  v2 = a9;
                  v15 = a8;
                  v13 = (unsigned int)v99;
                  a9[1] += v42;
                  goto LABEL_233;
                }
                v15 = a8;
LABEL_231:
                v13 = (unsigned int)v99;
                goto LABEL_232;
              }
            }
            if( v38 )
            {
              v130[1] = 1;
              v43 = MiDeleteBatch(v130);
              v44 = a9;
              v130[1] = 0;
              a9[1] += v43;
            }
            else
            {
              v44 = a9;
            }
          }
          else
          {
            if( v21 == (char *)qword_140C4EAA0 )
            {
              v15 = a8;
              *(_QWORD *)v3 = ZeroPte;
              Pml4eBase = MmGetPml4eBase();
              goto LABEL_231;
            }
            v44 = a9;
            a9[1] += MiDeleteBatch(v130);
            if( v29 != (_MMPTE *)v3 )
              KeBugCheckEx(0x1Au, 0x403ui64, v3, BugCheckParameter3, *((_QWORD *)v21 + 1));
            v45 = 48 * (*((_QWORD *)v21 + 5) & 0xFFFFFFFFFi64);
            ++a9[3];
            HIDWORD(SpinCount) = 0;
            v46 = _interlockedbittestandset64((volatile signed __int32 *)v21 + 6, 0x3Fui64);
            v120 = (char *)MmGetPfnDb() + v45;
            if( v46 )
            {
              do
              {
                do
                  KeYieldProcessorEx((UINT64 *)((char *)&SpinCount + 4));
                while( *((__int64 *)v21 + 3) < 0 );
              }
              while( _interlockedbittestandset64((volatile signed __int32 *)v21 + 6, 0x3Fui64) );
            }
            *((_QWORD *)v21 + 3) |= 0x4000000000000000ui64;
            if( (_BYTE)a10 && v105 )
            {
              *(_OWORD *)a2a = 0i64;
              v129 = 0i64;
              MiIdentifyPfn((_MMPFN *)v21, a2a);
              v109 = 1;
            }
            v39 = a8;
            if( (*(_BYTE *)(a8 + 184) & 7) != 0 && ((*((_QWORD *)v21 + 5) >> 60) & 7) == 2 )
              *((_QWORD *)v21 + 5) &= 0x8FFFFFFFFFFFFFFFui64;
          }
          v47 = (UNICODE_STRING *)(unsigned __int8)v21[34];
          if( ((unsigned __int8)v47 & 7) != 6 )
            MiBadShareCount((_MMPFN *)v21);
          Partition = *(_MI_PARTITION **)(qword_140C4E388 + 8 * ((*((_QWORD *)v21 + 5) >> 39) & 0x3FFi64));
          if( (BugCheckParameter3 & 0x42) != 0 && ((unsigned __int8)v47 & 0x10) == 0 )
          {
            v48 = (char)v47;
            if( (*((_DWORD *)v21 + 4) & 0x400i64) == 0 && ((unsigned __int8)v47 & 8) == 0 )
            {
              v49 = MiCapturePageFileInfoInline((UINT64 *)v21 + 2, 1i64, 0i64);
              v48 = v21[34];
              v22 = v49;
            }
            LOBYTE(v36) = v48 | 0x10;
            v21[34] = v36;
          }
          if( (*(_BYTE *)(v39 + 184) & 7) != 0 )
          {
            LOBYTE(v50) = MI_PFN_IS_PROTO((UNICODE_STRING *)v21, v47, v36, v26);
            if( v50 )
            {
              v51 = *((_QWORD *)v21 + 2);
              if( (v51 & 0x400) == 0 || (BugCheckParameter3 & 0x200) != 0 )
                goto LABEL_102;
              if( qword_140C4DC80 && (v51 & 0x10) == 0 )
                v51 &= ~qword_140C4DC80;
              if( (*(_DWORD *)(*(_QWORD *)(v51 >> 16) + 56i64) & 0x820) == 2080 )
LABEL_102:
                ++v44[3];
            }
          }
          v52 = v105;
          v112 = 0;
          v27 = 4;
          v28 = 0;
          if( v105 && v113 )
          {
            if( (*((_QWORD *)v21 + 3) & 0x3FFFFFFFFFFFFFFFui64) >= 0x10000 )
              v28 = 1;
            v112 = v28;
          }
          v53 = *((_QWORD *)v21 + 3) ^ (*((_QWORD *)v21 + 3) ^ (*((_QWORD *)v21 + 3) - 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
          *((_QWORD *)v21 + 3) = v53;
          if( (v53 & 0x3FFFFFFFFFFFFFFFi64) != 0 )
          {
            if( v105 )
            {
              v27 = 2;
              if( (v106 & 0x100) == 0 )
                *(_QWORD *)v21 &= ~1ui64;
            }
          }
          else
          {
            LOBYTE(v54) = MI_PFN_IS_PROTO((UNICODE_STRING *)v21, (UNICODE_STRING *)v53, 0, v26);
            if( v54 )
            {
              v59 = *((_QWORD *)v21 + 2);
              v111 = v56;
              v60 = *((_QWORD *)v21 + 1);
              v61 = v59 >> 5;
              v62 = v58;
              v63 = *((unsigned __int8 *)MmGetPfnDb() + 48 * (*((_QWORD *)v21 + 5) & 0xFFFFFFFFFi64) + 34) >> 6;
              if( !v63 || v63 == 3 )
              {
                v62 = 12;
              }
              else if( v63 == 2 )
              {
                v62 = 28;
              }
              ValidPte = MiMakeValidPte(0i64, *((_QWORD *)v21 + 5) & 0xFFFFFFFFFi64, v62 | 0xA0000000);
              CurrentPrcb = KeGetCurrentPrcb();
              v66 = ValidPte;
              v67 = *((_QWORD *)CurrentPrcb + 4095);
              if( !v67
                || (UltraMapping = MiGetUltraMapping((unsigned __int64 *)(v67 + 12448), 3u, 1i64, 0),
                    v69 = (_MMPTE *)((char *)MmGetPteBase() + ((UltraMapping >> 9) & 0x7FFFFFFFF8i64)),
                    *(_QWORD *)(v67 + 12344) = v69,
                    !UltraMapping) )
              {
                UltraMapping = (*((_QWORD *)CurrentPrcb + 4160) & 0xFFFFFFFFFFFFF000ui64)
                             + ((*((_QWORD *)CurrentPrcb + 4160) & 0xFFFi64) << 12);
                v69 = (_MMPTE *)((char *)MmGetPteBase() + ((UltraMapping >> 9) & 0x7FFFFFFFF8i64));
              }
              v70 = MmGetPml4eBase();
              v71 = MmGetPxeUserLimit();
              if( v69 >= v70
                && v69 <= v71
                && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0
                && (v66 & 1) != 0 )
              {
                v66 |= 0x8000000000000000ui64;
              }
              *(_QWORD *)v69 = v66;
              v72 = (v60 >> 3) & 0x1FF;
              v73 = *(_QWORD *)(UltraMapping + 8 * v72);
              v74 = (__int64 *)(UltraMapping + 8 * v72);
              v111 = v73;
              v75 = v73 & 0xFFFFFFFFF000i64 | (32 * (v61 & 0x1F | 0x40));
              if( qword_140C4DC80 )
              {
                if( (v75 & qword_140C4DC80) != 0 )
                  v75 |= 0x10ui64;
                else
                  v75 |= qword_140C4DC80;
              }
              v111 = v75;
              if( v74 >= (__int64 *)v70
                && v74 <= (__int64 *)v71
                && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0
                && (v75 & 1) != 0 )
              {
                v75 |= 0x8000000000000000ui64;
              }
              *v74 = v75;
              MiUnmapPageInHyperSpaceWorker(v74, 0x11u, 0x80000000ui64);
              v55 = *((_QWORD *)v21 + 3);
              v56 = 0i64;
              v28 = v112;
              v24 = v127;
              v3 = v125;
              v52 = v105;
              v58 = 4;
            }
            --*((_WORD *)v21 + 16);
            v76 = (UNICODE_STRING *)((v55 >> 62) & 1);
            if( *((_WORD *)v21 + 16) )
            {
              v77 = v21[34];
              if( (_DWORD)v76 )
              {
                v78 = v77 | 7;
              }
              else if( (v77 & 0x10) != 0 )
              {
                v78 = v77 & 0xF8 | 3;
              }
              else
              {
                v78 = v77 & 0xF8 | 2;
              }
              v21[34] = v78;
              if( (*((_DWORD *)v21 + 4) & 0x400i64) == 0 && (unsigned int)MiGetPagingFileOffset((MMPTE *)(v21 + 16)) )
                *(_BYTE *)(*(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v21 + 5) >> 39) & 0x3FFi64)) + 675i64) = 1;
              v27 = 3;
              if( v52 && v113 )
                v28 = 1;
              LOBYTE(v79) = MI_PFN_IS_PROTO((UNICODE_STRING *)v21, v76, v56, v57);
              if( v79 && !v108 && !BugCheckParameter2 )
                v27 = 4;
            }
            else
            {
              if( (_DWORD)v76 )
              {
                v80 = v21[35];
                if( (v80 & 0x10) != 0 )
                  v21[35] = v80 & 0xEF;
                v81 = *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v21 + 5) >> 39) & 0x3FFi64));
                v119 = *((_QWORD *)v21 + 2);
                if( (v119 & 0x400) == 0 )
                {
                  v82 = (v119 & 4) != 0 || (v119 & 2) != 0 ? MI_READ_PTE_LOCK_FREE((INT64)&v119) : v56;
                  v119 = v82;
                  if( v82 )
                    MiReleasePageFileInfo(
                      v81,
                      v82,
                      0,
                      (INT64)v57,
                      BugCheckParameter4,
                      v98,
                      v99,
                      a8,
                      (INT64)a9,
                      a10,
                      v103,
                      a12);
                }
                MiInsertPageInFreeOrZeroedList(v24 / 48, 2ui64);
              }
              else
              {
                v86 = *((_QWORD *)v21 + 2);
                v87 = -9i64;
                if( (v86 & 0x400) != 0 )
                  v87 = -2049i64;
                *((_QWORD *)v21 + 2) = v86 & v87;
                v88 = v21[34];
                if( (v88 & 0x10) != 0 )
                {
                  v89 = 136i64;
                  if( v123 != 1 )
                    v89 = 8i64;
                  MiInsertPageInList((_MMPFN *)v21, v89);
                }
                else
                {
                  v90 = v123;
                  v21[34] = v88 & 0xF8 | 2;
                  if( v90 <= 1 || (unsigned int)MiGetPfnPriority((INT64)v21) >= 5 )
                    MiInsertPageInList((_MMPFN *)v21, v58);
                  else
                    MiInsertProtectedStandbyPage(v91, (UINT64)v21);
                }
              }
              v27 = 4;
            }
          }
          if( v28 == 1 )
            MiChargeCommit(Partition, 1ui64, 4ui64);
          _InterlockedAnd64((volatile signed __int64 *)v21 + 3, 0x7FFFFFFFFFFFFFFFui64);
          LODWORD(v21) = 0;
          if( v109 )
          {
            *(_QWORD *)&EventData.Size = 24i64;
            EventData.Ptr = (unsigned __int64)a2a;
            LODWORD(BugCheckParameter4) = 289413890;
            EtwTraceKernelEvent(&EventData, 1ui64, 0x20000001ui64, 0x277u, BugCheckParameter4);
            v109 = 0;
          }
          v25 = v120;
LABEL_170:
          if( v25 )
          {
            LODWORD(v116) = (_DWORD)v21;
            while( _interlockedbittestandset64((volatile signed __int32 *)v25 + 6, 0x3Fui64) )
            {
              do
                KeYieldProcessorEx(&v116);
              while( *((__int64 *)v25 + 3) < 0 );
            }
            if( (v25[34] & 7) != 6 )
              MiBadShareCount((_MMPFN *)v25);
            v83 = (*((_QWORD *)v25 + 3) & 0x3FFFFFFFFFFFFFFFi64) - 1;
            *((_QWORD *)v25 + 3) ^= (*((_QWORD *)v25 + 3) ^ v83) & 0x3FFFFFFFFFFFFFFFi64;
            if( !v83 )
              MiPfnShareCountIsZero((UINT64)v25, 0i64);
            _InterlockedAnd64((volatile signed __int64 *)v25 + 3, 0x7FFFFFFFFFFFFFFFui64);
          }
          v84 = Partition;
          if( v22 )
            MiReleasePageFileInfo(
              (INT64)Partition,
              v22,
              1,
              (INT64)v26,
              BugCheckParameter4,
              v98,
              v99,
              a8,
              (INT64)a9,
              a10,
              v103,
              a12);
          if( v108 )
          {
            v85 = MiDecrementCombinedPte(v103 + 1664, v108);
            goto LABEL_195;
          }
          if( BugCheckParameter2 )
          {
            v85 = MiDecrementCloneBlockReference(BugCheckParameter2, (volatile INT64 *)v124, v103);
LABEL_195:
            v27 = v85;
          }
          if( v28 == 1 )
            goto LABEL_203;
          if( v27 == 3 )
          {
            if( (*(_BYTE *)(a8 + 184) & 7) == 0 || v84 == v121 )
            {
              v2 = a9;
              ++a9[1];
              goto LABEL_204;
            }
LABEL_203:
            v2 = a9;
            goto LABEL_204;
          }
          v2 = a9;
          if( v27 == 5 )
            ++a9[2];
LABEL_204:
          if( (*(_BYTE *)(a8 + 184) & 7) != 0 && !MiPteIsSessionDynamicBuffer(v3) )
            ++*v2;
          if( v3 < (unsigned __int64)MmGetPml4eBase()
            || v3 > (unsigned __int64)MmGetPml4eLimit()
            || (*(_BYTE *)(a8 + 184) & 7) == 0 )
          {
            v92 = ZeroPte;
            Pml4eBase = MmGetPml4eBase();
            if( v3 >= (unsigned __int64)Pml4eBase
              && v3 <= (unsigned __int64)MmGetPxeUserLimit()
              && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0
              && (ZeroPte & 1) != 0 )
            {
              v92 = ZeroPte | 0x8000000000000000ui64;
            }
            v15 = a8;
            v13 = (unsigned int)v99;
            *(_QWORD *)v3 = v92;
            goto LABEL_233;
          }
          MiWriteTopLevelPxe((_QWORD *)v3, ZeroPte);
          v15 = a8;
LABEL_211:
          v13 = (unsigned int)v99;
          Pml4eBase = MmGetPml4eBase();
          goto LABEL_233;
        }
        v2[1] += MiDeleteBatch(v130);
        v93 = MiTryDeleteTransitionPte((UINT64 *)v3);
        if( v93 == 1 )
        {
          BugCheckParameter3 = MI_READ_PTE_LOCK_FREE(v3);
          v94 = BugCheckParameter3;
          MiReleasePageFileSpace(v121, BugCheckParameter3, 1i64);
          if( (*(_BYTE *)(v15 + 184) & 7) != 0 )
          {
            ++v2[3];
            if( !MiPteIsSessionDynamicBuffer(v3) )
              ++*v2;
          }
          else if( IS_PTE_NOT_DEMAND_ZERO(v94) )
          {
            ++v2[3];
          }
          *(_QWORD *)v3 = ZeroPte;
          goto LABEL_211;
        }
        ++v2[3];
        if( (*(_BYTE *)(a8 + 184) & 7) != 0 && !MiPteIsSessionDynamicBuffer(v3) )
          ++*v2;
        v15 = a8;
        v13 = (unsigned int)v99;
        v9 = a12;
        Pml4eBase = MmGetPml4eBase();
        if( v93 == 3 )
          ++v2[1];
      }
LABEL_234:
      v14 = v122;
      v3 += 8i64;
      v125 = v3;
      if( v3 > v126 )
        break;
      v11 = v105;
      LOBYTE(v7) = v106;
    }
  }
  result = MiDeleteBatch(v130);
  if( (_DWORD)v99 )
  {
    v96 = HIWORD(*(_DWORD *)(v14 + 16)) & 0x3FF;
    if( v96 < (unsigned int)v99 )
      KeBugCheckEx(0x1Au, 0x41790ui64, v14, v96, (unsigned int)v99);
    HIDWORD(v116) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)(v14 + 24), 0x3Fui64) )
    {
      do
      {
        KeYieldProcessorEx((UINT64 *)((char *)&v116 + 4));
        result = *(_QWORD *)(v14 + 24);
      }
      while( result < 0 );
    }
    *(_QWORD *)(v14 + 16) ^= ((unsigned int)*(_QWORD *)(v14 + 16) ^ (((unsigned int)(*(_QWORD *)(v14 + 16) >> 16)
                                                                    - (_DWORD)v99) << 16)) & 0x3FF0000;
    _InterlockedAnd64((volatile signed __int64 *)(v14 + 24), 0x7FFFFFFFFFFFFFFFui64);
  }
  return result;
}

Referenced by:

MiDeleteEmptyPageTableTail
MiDeleteVaTail