MiExtendPagingFileMaximum

void __fastcall MiExtendPagingFileMaximum(__int64 a1, __int64 a2, unsigned __int64 a3){
  RTL_BITMAP *v3; 
  KIRQL v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  _MMPTE *PteBase; 
  unsigned int v11; 
  UINT8 *v12; 
  unsigned int v13; 
  UINT64 v14; 
  unsigned int v15; 
  __int128 v16; 
  _DWORD *v17; 
  INT64 v18; 
  unsigned int v19; 
  unsigned __int64 v20; 
  UINT64 v21; 
  UINT64 v22; 
  char *v23; 
  unsigned __int64 v24; 
  unsigned __int64 v25; 
  UINT64 v26; 
  UINT8 *v27; 
  volatile LONG *SpinLock; 
  _DWORD *v29[2]; 
  __int128 v30; 
  __int64 v31; 
  unsigned int v32; 
  UINT64 v33; 
  UINT64 v34; 
  UINT64 v35; 
  INT64 v36; 
  v35 = a3;
  v3 = (RTL_BITMAP *)(a2 + 8);
  RtlSetAllBits((RTL_BITMAP *)(a2 + 8));
  RtlSetAllBits((RTL_BITMAP *)(a2 + 24));
  SpinLock = (volatile LONG *)(a1 + 232);
  v7 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(a1 + 232));
  v8 = *(_QWORD *)(a1 + 112);
  v9 = v7;
  PteBase = MmGetPteBase();
  v11 = *(_DWORD *)(v8 + 8);
  v32 = v11;
  if( a3 )
  {
    v12 = (UINT8 *)PteBase + ((*(_QWORD *)(a1 + 216) >> 9) & 0x7FFFFFFFF8i64);
    v36 = (INT64)v12;
    v27 = (UINT8 *)PteBase + ((a3 >> 9) & 0x7FFFFFFFF8i64);
    v34 = ((4 * (unsigned __int64)v11) >> 12) + (((4i64 * v11) & 0xFFF) != 0);
    memmove(v27, v12, 8 * v34);
    memset((INT64)v12, 0i64);
    v11 = v32;
  }
  else
  {
    v36 = 0i64;
    v27 = 0i64;
    v34 = 0i64;
  }
  v13 = 8 * ((v11 >> 6) + ((v11 & 0x3F) != 0));
  memmove(*(UINT8 **)(a2 + 16), *(UINT8 **)(v8 + 16), v13);
  memmove(*(UINT8 **)(a2 + 32), *(UINT8 **)(v8 + 32), v13);
  v14 = *(unsigned int *)(v8 + 8);
  v15 = 8 * v13 - v14;
  if( v15 )
  {
    RtlSetBits(v3, v14, v15);
    RtlSetBits((RTL_BITMAP *)(a2 + 24), *(unsigned int *)(v8 + 24), v15);
  }
  *(_QWORD *)(a1 + 8) = v3->SizeOfBitMap;
  v16 = *(_OWORD *)(v8 + 16);
  v29[1] = *(_DWORD **)(v8 + 8);
  v29[0] = (_DWORD *)v8;
  v31 = *(_QWORD *)(v8 + 32);
  v30 = v16;
  v17 = MiDerefPageFileSpaceBitmaps(a1, v29, 1);
  *(_QWORD *)(a1 + 112) = a2;
  *(_QWORD *)(a1 + 216) = v35;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(a1 + 232));
  __writecr8(v9);
  if( v17 )
    ExFreePoolWithTag(v17, 0);
  v18 = v36;
  if( v36 )
  {
    v19 = v34;
    if( v34 )
    {
      v20 = (unsigned __int64)v27;
      v21 = v34;
      v33 = v34;
      do
      {
        v35 = MI_READ_PTE_LOCK_FREE(v20);
        v22 = v35;
        if( (v35 & 1) != 0 )
        {
          MiPteInShadowRange((UINT64)&v35);
          v23 = (char *)MmGetPfnDb() + 48 * ((v22 >> 12) & 0xFFFFFFFFFi64);
          if( (*((_QWORD *)v23 + 1) | 0x8000000000000000ui64) != v20 )
          {
            v24 = (unsigned __int8)MiLockPageInline((INT64)v23);
            v25 = ExAcquireSpinLockExclusive(SpinLock);
            v35 = MI_READ_PTE_LOCK_FREE(v20);
            if( (v35 & 1) != 0
              && v23 == (char *)MmGetPfnDb() + 48 * ((v35 >> 12) & 0xFFFFFFFFFi64)
              && (*((_QWORD *)v23 + 1) | 0x8000000000000000ui64) != v20 )
            {
              v35 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v20 >> 9) & 0x7FFFFFFFF8i64));
              v26 = (*((_QWORD *)v23 + 5) ^ (v35 >> 12)) & 0xFFFFFFFFFi64;
              *((_QWORD *)v23 + 1) = v20;
              *((_QWORD *)v23 + 5) ^= v26;
            }
            ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)SpinLock);
            __writecr8(v25);
            _InterlockedAnd64((volatile signed __int64 *)v23 + 3, 0x7FFFFFFFFFFFFFFFui64);
            __writecr8(v24);
            v21 = v33;
          }
        }
        v20 += 8i64;
        v33 = --v21;
      }
      while( v21 );
      v19 = v34;
      v18 = v36;
    }
    MiReleasePtes((INT64)&qword_140C4EC80, v18, v19);
  }
}

Referenced by:

MiCreatePagingFile