MiReservePageFileSpace

VOID __fastcall MiReservePageFileSpace(INT64 rcx0, UINT64 rdx0, INT64 a3){
  signed __int32 v4; 
  unsigned int v5; 
  RTL_BALANCED_NODE *v6; 
  __int64 v7; 
  RTL_BALANCED_NODE *Address; 
  __int64 v9; 
  int v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  UINT64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  UINT64 v16; 
  int v17; 
  UINT64 v18; 
  unsigned int v19; 
  INT64 v20; 
  UINT64 v21; 
  unsigned int v22; 
  INT64 v23; 
  UINT64 v24; 
  __int64 v25; 
  unsigned int v26; 
  unsigned int v27; 
  int v28; 
  unsigned int v29; 
  int FreePageFileSpace; 
  UINT64 v31; 
  CHAR v32; 
  UINT64 i; 
  int v34; 
  INT64 v35; 
  UINT64 v36; 
  UINT64 v37; 
  unsigned __int64 v38; 
  unsigned __int64 v39; 
  unsigned __int64 v40; 
  __int64 v41; 
  __int64 v42; 
  unsigned int v43; 
  __int64 v44; 
  int v45; 
  int v46; 
  int v47; 
  INT64 v48; 
  unsigned int v49; 
  unsigned int v50; 
  UINT64 a2; 
  UINT64 v52; 
  UINT64 v53; 
  INT64 v54[2]; 
  __int128 v55; 
  __int64 v56; 
  INT64 v58; 
  v58 = a3;
  *(_OWORD *)v54 = 0i64;
  v56 = 0i64;
  v4 = *(_DWORD *)(rcx0 + 872);
  v5 = v4 & 0x3FF;
  v55 = 0i64;
  if( v5 >= 0x10 )
  {
    v6 = 0i64;
    HIDWORD(v48) = 0;
    if( !a3 )
    {
      v17 = 1;
      if( !(unsigned int)MiGetPageFileSectionForReservation(rdx0, (__int64)v54, 1) )
        return;
      v16 = *((_QWORD *)&v55 + 1);
      a2 = v55;
      HIDWORD(v48) = 1;
      goto LABEL_14;
    }
    if( (*(_BYTE *)(a3 + 184) & 7) != 0 )
    {
      a2 = rdx0 & 0xFFFFFFFFFFFFF000ui64;
      v16 = (rdx0 & 0xFFFFFFFFFFFFF000ui64) + 4088;
      v17 = 1;
LABEL_15:
      v18 = a2;
      v19 = ((__int64)(v16 - a2) >> 3) + 1;
      if( v19 > v5 )
      {
        v41 = (__int64)(v16 - rdx0) >> 3;
        v42 = (__int64)(rdx0 - a2) >> 3;
        v43 = v19 - v5;
        if( (unsigned int)v41 < v43 )
        {
          v45 = v43 - v41;
          v44 = 0i64;
          LODWORD(v42) = v42 - v45;
        }
        else
        {
          v44 = (unsigned int)v41 - v43;
        }
        v16 = rdx0 + 8 * v44;
        v18 = rdx0 - 8i64 * (unsigned int)v42;
        a2 = v18;
      }
      if( a3 )
        v17 = 129;
      if( v6 && SHIDWORD(v6[2].Left) < 0 )
        v17 |= (unsigned __int64)((__int64)v6[2].Children[0] & 0xF80 | 0x40u) >> 5;
      v20 = 0i64;
      v21 = rdx0 - 8;
      v22 = 0;
      v52 = 0i64;
      v49 = 0;
      if( rdx0 - 8 >= v18 )
      {
        do
        {
          if( !(unsigned int)MiReservePageFileSpaceForPage(rcx0, v21, v17, &v52) )
            break;
          ++v22;
          v21 -= 8i64;
        }
        while( v21 >= a2 );
        v20 = v52;
        v49 = v22;
      }
      v23 = 0i64;
      v24 = rdx0 + 8;
      v25 = 0i64;
      v53 = 0i64;
      if( rdx0 + 8 <= v16 )
      {
        do
        {
          if( !(unsigned int)MiReservePageFileSpaceForPage(rcx0, v24, v17, &v53) )
            break;
          v25 = (unsigned int)(v25 + 1);
          v24 += 8i64;
        }
        while( v24 <= v16 );
        v23 = v53;
      }
      v26 = v49;
      v27 = v25 + v49 + 1;
      v50 = v27;
      if( v20 )
      {
        v38 = v20;
        if( qword_140C4DC80 && (v20 & 0x10) == 0 )
          v38 = v20 & ~qword_140C4DC80;
        a2 = MiUpdatePageFileHighInPte(v20, HIDWORD(v38) + 1);
      }
      else
      {
        if( !v23 )
          goto LABEL_31;
        v39 = v23;
        v40 = v23;
        if( qword_140C4DC80 && (v23 & 0x10) == 0 )
          v39 = v23 & ~qword_140C4DC80;
        if( v27 < HIDWORD(v39) )
        {
          if( qword_140C4DC80 && (v23 & 0x10) == 0 )
            v40 = ~qword_140C4DC80 & v23;
          a2 = MiUpdatePageFileHighInPte(v23, HIDWORD(v40) - v27);
        }
        else
        {
LABEL_31:
          a2 = 0i64;
        }
      }
      if( (unsigned int)MI_IS_PTE_IN_WS_SWAP_SET((MMPTE *)rcx0) )
      {
        a2 = 0i64;
        v28 = 16;
      }
      if( v29 == 1 )
      {
        if( v28 )
          goto LABEL_47;
        v28 = 64;
      }
      FreePageFileSpace = MiFindFreePageFileSpace((_MI_PARTITION *)rcx0, (_MMPTE *)&a2, v29, v28 | 1u, v50);
      if( FreePageFileSpace == (_DWORD)v48 )
        goto LABEL_36;
      _InterlockedCompareExchange(
        (volatile signed __int32 *)(rcx0 + 872),
        v4 ^ ((unsigned __int16)FreePageFileSpace ^ (unsigned __int16)v4) & 0x3FF,
        v4);
      if( FreePageFileSpace )
      {
        v46 = v48 - FreePageFileSpace;
        if( (unsigned int)v25 < (int)v48 - FreePageFileSpace )
        {
          v47 = v46 - v25;
          v25 = 0i64;
          v26 -= v47;
        }
        else
        {
          v25 = (unsigned int)(v25 - v46);
        }
LABEL_36:
        v31 = rdx0 + 8 * v25;
        v32 = v17 & 0xFE;
        for( i = rdx0 - 8i64 * v26;
              i <= v31;
              a2 = MiSwizzleInvalidPte((v36 + 0x100000000i64) ^ (unsigned int)v36 ^ (unsigned int)v37) )
        {
          v34 = MiReservePageFileSpaceForPage(rcx0, i, v32, &a2);
          v36 = a2;
          if( !v34 )
            MiReleasePageFileInfo(rcx0, a2, v58 != 0, v35, v48, a2, v52, v53, v54[0], v54[1], v55, *((INT64 *)&v55 + 1));
          v37 = v36;
          if( qword_140C4DC80 && (v36 & 0x10) == 0 )
            v36 &= ~qword_140C4DC80;
          if( v37 && qword_140C4DC80 )
          {
            if( (v37 & 0x10) != 0 )
              LODWORD(v37) = v37 & 0xFFFFFFEF;
            else
              LODWORD(v37) = ~(_DWORD)qword_140C4DC80 & v37;
          }
          i += 8i64;
        }
      }
LABEL_47:
      if( HIDWORD(v48) )
        MiReleasePageFileSectionInfo((INT64)v54);
      return;
    }
    v7 = (__int64)((rdx0 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
    Address = MiLocateAddress(v7);
    v6 = Address;
    if( Address )
    {
      v10 = (int)Address[2].Children[0];
      if( (v10 & 0x70) == 0
        && (v10 & 0x100004) == 0x100000
        && ((v10 & 0x100000) == 0 || (v10 & 0x400000) == 0 && (v10 & 0xC0000u) < 0x80000) )
      {
        v11 = v7 & 0xFFFFFFFFFFE00000ui64;
        if( v11 >= (LODWORD(Address[1].Children[0]) | ((unsigned __int64)LOBYTE(Address[1].Right) << 32)) << 12 )
          v12 = (v11 >> 9) & 0x7FFFFFFFF8i64;
        else
          v12 = 8
              * ((LODWORD(Address[1].Children[0]) | ((unsigned __int64)LOBYTE(Address[1].Right) << 32)) & 0xFFFFFFFFFi64);
        v13 = v12 + v9;
        v14 = v11 + 2093056;
        v15 = HIDWORD(Address[1].Left) | ((unsigned __int64)BYTE1(Address[1].Right) << 32);
        a2 = v13;
        if( v14 <= v15 << 12 )
        {
          v16 = v9 + ((v14 >> 9) & 0x7FFFFFFFF8i64);
          a2 = v13;
        }
        else
        {
          v16 = v9 + 8 * (v15 & 0xFFFFFFFFFi64);
        }
        v17 = 1;
LABEL_14:
        a3 = v58;
        goto LABEL_15;
      }
    }
  }
}

Referenced by:

MiFillNoReservationCluster
MiWsleFlush