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