MiGetNextPageTable

VOID __fastcall MiGetNextPageTable(INT64 a1, INT64 a2, INT64 a3, CHAR a4, CHAR a5, _DWORD *a6){
  _MMPTE *PteBase; 
  INT64 v11; 
  INT64 v12; 
  __int16 v13; 
  UINT64 LeafVa; 
  char v15; 
  CHAR *AnyMultiplexedVm; 
  int v17; 
  __int128 v18; 
  __int16 result; 
  char result_2; 
  CHAR result_6; 
  INT64 v22; 
  CHAR *v23; 
  INT64 v24; 
  INT64 v25; 
  INT64(__fastcall *v26)(INT64); 
  __int128 *v27; 
  v18 = 0i64;
  memset((INT64)&result, 0i64);
  PteBase = MmGetPteBase();
  v11 = ((a1 << 25) - ((_QWORD)PteBase << 25)) >> 16;
  v12 = ((a2 << 25) - ((_QWORD)PteBase << 25)) >> 16;
  v13 = 2145;
  result = 2145;
  if( (a5 & 1) != 0 )
  {
    v13 = 2273;
    result = 2273;
  }
  if( (a5 & 2) != 0 )
    result = v13 | 0x200;
  LeafVa = MiGetLeafVa(v11);
  if( LeafVa >= 0xFFFF800000000000ui64 && (LeafVa > qword_140C4E0A8 || LeafVa < qword_140C4F878) )
    AnyMultiplexedVm = MiGetAnyMultiplexedVm(1i64);
  else
    AnyMultiplexedVm = (CHAR *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1664i64);
  if( (v15 & 4) == 0 )
  {
    v17 = MiFastLockLeafPageTable((INT64)AnyMultiplexedVm, v11);
    if( v17 )
    {
      *a6 = v17 - 1;
      return;
    }
    result |= 4u;
  }
  v22 = a3;
  v27 = &v18;
  v23 = AnyMultiplexedVm;
  result_6 = a4;
  result_2 = result_2 & 0xE3 | 4;
  v26 = MiGetNextPageTableTail;
  v24 = v11;
  v25 = v12;
  MiWalkPageTables((INT64)&result);
  *a6 = v18;
}

Referenced by:

MiCheckCommitReleaseFromVad
MiCloneCaptureVadCommit
MiComputePageCommitment
MiFlushDirtyBitsToPfn
MiGetNextNonGapPfnPage
MiIsCfgBitMapPageShared
MiMakeVaRangePhysicallyContiguous
MiQueryVaPhysicalContiguity
MiSplitPrivatePage
MiUpdateForkMaps
MiWalkVaRange
NtGetWriteWatch
NtLockVirtualMemory