MiMakeVaRangePhysicallyContiguous

INT64 __fastcall MiMakeVaRangePhysicallyContiguous(INT64 a1, UINT64 a2, INT64 a3, _MMPFN *a4){
  _MMPTE *PteBase; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  UINT64 v9; 
  char v10; 
  unsigned __int64 v11; 
  INT64 v12; 
  unsigned __int64 v13; 
  _MMPFN *v14; 
  __int64 v15; 
  _MMPFN *v16; 
  INT64 v17; 
  INT64 v18; 
  INT64 v19; 
  INT64 a5; 
  INT64 v22; 
  INT64 v23; 
  INT64 v24; 
  INT64 v25; 
  INT64 v26; 
  INT64 v27; 
  INT64 v28; 
  UINT64 SpinCount; 
  int a6; 
  UINT64 v31; 
  a6 = 0;
  PteBase = MmGetPteBase();
  v7 = (unsigned __int64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64);
  v8 = (unsigned __int64)PteBase + (((a2 + 0x1FFFFF) >> 9) & 0x7FFFFFFFF8i64);
  v9 = 0i64;
  v10 = MiLockWorkingSetShared(a1);
  if( v7 <= v8 )
  {
    do
    {
      if( !v9 )
        goto LABEL_37;
      if( (v7 & 0xFFF) == 0 )
      {
        MiUnlockPageTableInternal(a1, v9);
        v9 = 0i64;
      }
      if( !v9 )
      {
LABEL_37:
        MiGetNextPageTable(v7, v8, 0i64, v10, 1, &a6);
        if( !v11 )
          break;
        v9 = (UINT64)PteBase + ((v11 >> 9) & 0x7FFFFFFFF8i64);
        if( v11 != v7 )
          break;
      }
      v12 = MI_READ_PTE_LOCK_FREE(v7);
      v31 = v12;
      v13 = v12;
      if( (v12 & 1) != 0 )
      {
        MiPteInShadowRange((UINT64)&v31);
        v14 = (_MMPFN *)((char *)MmGetPfnDb() + 48 * ((v13 >> 12) & 0xFFFFFFFFFi64));
      }
      else
      {
        if( (v12 & 0x400) != 0 )
          break;
        if( (v12 & 0x800) == 0 )
          break;
        v14 = MiLockTransitionLeafPage((_MMPTE *)v7, 0i64);
        if( !v14 )
          break;
      }
      if( !(unsigned int)MiCheckContiguityTradeEligible((INT64)v14) )
        break;
      v15 = *((_QWORD *)a4 + 3) & 0xFFFFFFFFFi64;
      v16 = a4;
      if( v15 == 0xFFFFFFFFFi64 )
        a4 = 0i64;
      else
        a4 = (_MMPFN *)((char *)MmGetPfnDb() + 48 * v15);
      if( (*((_BYTE *)v14 + 34) & 7) == 6 )
      {
        MiTradeActivePage(
          (ULONG_PTR)v14,
          (__int64)v16,
          (__int64)((v7 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16,
          1u,
          0,
          v22);
        LODWORD(SpinCount) = 0;
        while( _interlockedbittestandset64((volatile signed __int32 *)v14 + 6, 0x3Fui64) )
        {
          do
            KeYieldProcessorEx(&SpinCount);
          while( *((__int64 *)v14 + 3) < 0 );
        }
      }
      else
      {
        MiReplaceTransitionPage((ULONG_PTR)v14, (__int64)v16, 0, 0i64);
      }
      *((_QWORD *)v14 + 2) = ZeroPte;
      MiSetOriginalPtePfnFromFreeList((UINT64 *)v14 + 2);
      MiReturnFreeZeroPage((INT64)v14);
      _InterlockedAnd64((volatile signed __int64 *)v14 + 3, 0x7FFFFFFFFFFFFFFFui64);
      if( (v7 & 0x78) == 0 && MiWorkingSetIsContended(a1) || KeShouldYieldProcessor() )
      {
        if( v9 )
        {
          MiUnlockPageTableInternal(a1, v9);
          v9 = 0i64;
        }
        MiUnlockWorkingSetShared(a1, v10);
        MiLockWorkingSetShared(a1);
      }
      v7 += 8i64;
      PteBase = MmGetPteBase();
    }
    while( v7 <= v8 );
    if( v9 )
      MiUnlockPageTableInternal(a1, v9);
  }
  MiUnlockWorkingSetShared(a1, v10);
  if( a4 )
    MiFreePageChain((INT64)a4, v17, v18, v19, a5, v22, v23, v24, v25, v26, v27, v28);
  return a4 != 0i64 ? 0xC0000001 : 0;
}

Referenced by:

MiProcessVaContiguityInformation