MiSharedVaToPartition
UINT64 *__fastcall MiSharedVaToPartition(INT64 a1, UINT64 a2, UINT64 a3){
UINT64 *v7;
INT64 v8;
UINT64 v9;
__int64 v10;
_QWORD *CloneAddress;
RTL_BALANCED_NODE *Address;
_RTL_BALANCED_NODE *v13;
char v14;
_MMSESSION *v15;
__int64 v16;
_MMSESSION *v17;
_RTL_BALANCED_NODE *Root;
unsigned __int64 v19;
RTL_BALANCED_NODE *v20;
if( !byte_140C4E39C )
return &MiSystemPartition;
v7 = *(UINT64 **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a1 + 174));
v8 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((a2 >> 9) & 0x7FFFFFFFF8i64));
v9 = v8;
if( (v8 & 0x400) != 0 && MI_PROTO_FORMAT_COMBINED(v8) )
return **(UINT64 ***)(((a3 - 48) & 0xFFFFFFFFFFFFF000ui64) + 0x10);
if( a2 >= 0xFFFF800000000000ui64 )
{
v14 = *(_BYTE *)(a1 + 184) & 7;
if( v14 == 4 )
{
v15 = &Session;
}
else
{
if( v14 != 1 )
return v7;
v16 = *((_QWORD *)KeGetCurrentThread() + 23);
v17 = *(_MMSESSION **)(v16 + 1368);
if( !v17 )
return v7;
if( (*(_DWORD *)(v16 + 2172) & 0x1000) != 0 )
return v7;
v15 = v17 + 6;
if( !v15 )
return v7;
}
Root = v15->ViewRoot.Root;
while( Root )
{
v19 = Root[3].ParentValue & 0xFFFFFFFFFFFFF000ui64;
if( (_RTL_BALANCED_NODE *)a2 >= (_RTL_BALANCED_NODE *)((char *)Root[1].Children[1] + v19) )
{
Root = Root->Children[1];
}
else
{
if( a2 >= v19 )
{
v13 = Root[2].Children[0];
goto LABEL_31;
}
Root = Root->Children[0];
}
}
v20 = MiSessionLookupImage(a2);
if( !v20 )
return v7;
v13 = (RTL_BALANCED_NODE *)((char *)v20 + 80);
LABEL_31:
if( v13->Children[0] )
return *(UINT64 **)(qword_140C4E388 + 8i64 * (WORD2(v13->Children[0][2].Right) & 0x3FF));
return v7;
}
if( MiIsPrototypePteVadLookup(v9) )
goto LABEL_13;
v10 = *((_QWORD *)KeGetCurrentThread() + 23);
if( !*(_QWORD *)(v10 + 1264) || (CloneAddress = MiLocateCloneAddress(v10, a3)) == 0i64 )
{
v7 = 0i64;
goto LABEL_13;
}
v7 = *(UINT64 **)(CloneAddress[7] + 24i64);
if( !v7 )
{
LABEL_13:
Address = MiLocateAddress(a2);
if( !Address )
return v7;
if( ((__int64)Address[2].Children[0] & 0x100000) != 0 )
return v7;
v13 = Address[3].Children[0];
if( !v13 )
return v7;
goto LABEL_31;
}
return v7;
}Referenced by:
MiActOnPte
MiCreateSharedZeroPages
MiResolvePageFileFault