MiMakeVaRangePhysicallyContiguous

NTSTATUS __fastcall MiMakeVaRangePhysicallyContiguous(_MMSUPPORT_INSTANCE *Vm, UINT64 a2, INT64 a3, _MMPFN *a4){
  _MMPTE *PteBase; 
  unsigned __int64 v7; 
  _MMPTE *v8; 
  UINT64 v9; 
  UINT64 v10; 
  UINT8 v11; 
  UINT8 v12; 
  _MMPTE *NextPageTable; 
  UINT64 v14; 
  UINT64 v15; 
  _MMPFN *v16; 
  __int64 v17; 
  _MMPFN *v18; 
  int v19; 
  UINT64 PageTableFlags; 
  UINT64 v22; 
  UINT64 SpinCount; 
  UINT64 LargePage; 
  UINT64 v25; 

  LODWORD(LargePage) = 0;
  PteBase = MmGetPteBase();
  v7 = (unsigned __int64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64);
  v8 = (_MMPTE *)((char *)PteBase + (((a2 + 0x1FFFFF) >> 9) & 0x7FFFFFFFF8i64));
  v9 = 0i64;
  MiLockWorkingSetShared();
  v12 = v11;
  if( v7 <= (unsigned __int64)v8 )
  {
    do
    {
      if( !v9 )
        goto LABEL_37;
      if( (v7 & 0xFFF) == 0 )
      {
        MiUnlockPageTableInternal((INT64)Vm, v9);
        v9 = 0i64;
      }
      if( !v9 )
      {
LABEL_37:
        LODWORD(PageTableFlags) = 1;
        NextPageTable = MiGetNextPageTable((_MMPTE *)v7, v8, 0i64, v12, PageTableFlags, &LargePage, v22);
        if( !NextPageTable )
          break;
        v9 = (UINT64)PteBase + (((unsigned __int64)NextPageTable >> 9) & 0x7FFFFFFFF8i64);
        if( NextPageTable != (_MMPTE *)v7 )
          break;
      }
      LODWORD(v14) = MI_READ_PTE_LOCK_FREE(v7);
      v25 = v14;
      v15 = v14;
      if( (v14 & 1) != 0 )
      {
        MiPteInShadowRange((UINT64)&v25);
        v16 = &MmGetPfnDb()[(v15 >> 12) & 0xFFFFFFFFFi64];
      }
      else
      {
        if( (v14 & 0x400) != 0 )
          break;
        if( (v14 & 0x800) == 0 )
          break;
        v16 = MiLockTransitionLeafPage(v7, 0i64);
        if( !v16 )
          break;
      }
      if( !MiCheckContiguityTradeEligible((INT64)v16) )
        break;
      v17 = a4->u2._bf_0 & 0xFFFFFFFFFi64;
      v18 = a4;
      if( v17 == 0xFFFFFFFFFi64 )
        a4 = 0i64;
      else
        a4 = &MmGetPfnDb()[v17];
      if( (*(_BYTE *)(&v16->u3 + 1) & 7) == 6 )
      {
        MiTradeActivePage(
          v16,
          v18,
          (VOID *)((__int64)((v7 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16),
          FlushAllAwakeProcessors);
        LODWORD(SpinCount) = 0;
        while( _interlockedbittestandset64((volatile signed __int32 *)&v16->u2, 0x3Fui64) )
        {
          do
            KeYieldProcessorEx(&SpinCount);
          while( v16->u2._bf_0 < 0 );
        }
      }
      else
      {
        MiReplaceTransitionPage(v16, v18, 0i64);
      }
      v16->OriginalPte = ZeroPte;
      MiSetOriginalPtePfnFromFreeList(&v16->OriginalPte.u.Long);
      MiReturnFreeZeroPage((INT64)v16);
      _InterlockedAnd64(&v16->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      if( (v7 & 0x78) == 0 && (LOBYTE(v19) = MiWorkingSetIsContended((INT64)Vm), v19)
        || (unsigned int)KeShouldYieldProcessor() )
      {
        if( v9 )
        {
          MiUnlockPageTableInternal((INT64)Vm, v9);
          v9 = 0i64;
        }
        LOBYTE(v10) = v12;
        MiUnlockWorkingSetShared(Vm, v10);
        MiLockWorkingSetShared();
      }
      v7 += 8i64;
      PteBase = MmGetPteBase();
    }
    while( v7 <= (unsigned __int64)v8 );
    if( v9 )
      MiUnlockPageTableInternal((INT64)Vm, v9);
  }
  LOBYTE(v10) = v12;
  MiUnlockWorkingSetShared(Vm, v10);
  if( a4 )
    MiFreePageChain(a4);
  return a4 != 0i64 ? 0xC0000001 : 0;
}

Referenced by:

MiProcessVaContiguityInformation