MiMapNewSession
INT64 __stdcall MiMapNewSession(UINT64 rcx0, UINT64 rdx0){
void *v2;
_QWORD *v3;
_QWORD *v4;
INT64 v5;
__int64 v6;
char *SystemPage;
INT64 v8;
_MMPFN *PfnDb;
__int64 v10;
__int64 v11;
__int64 v12;
UINT64 *v13;
INT64 v14;
INT64 PfnLink;
_QWORD *v16;
__int64 v17;
UINT64 ValidPte;
UINT64 v19;
unsigned int v20;
UINT64 *v21;
__int64 v22;
__int64 v23;
MMPTE *v24;
INT64 v25;
UINT64 v26;
INT64 v28[2];
__int64 v29[11];
MMPTE *PteAddress;
UINT64 v32;
_RTL_BITMAP_EX *BitMapHeader;
v2 = (void *)rcx0;
*(_OWORD *)v28 = 0i64;
memset(v29, 0, 32);
LODWORD(v3) = MiPartitionIdToPointer(rdx0, rdx0);
v4 = v3;
v5 = 0i64;
PteAddress = MiGetPteAddress(v2);
MiInitializePageColorBase(0i64, 0i64, (INT64)v28);
v6 = 8i64;
do
{
SystemPage = MiGetSystemPage(v4, (__int64)v28);
MiSetPfnLink(SystemPage, v5);
v5 = v8;
--v6;
}
while( v6 );
MiFillPteHierarchy(qword_140C4DB20, (UINT64 *)v29);
PfnDb = MmGetPfnDb();
v11 = 4i64;
v12 = (v10 - (__int64)PfnDb) / 48;
do
{
v13 = (UINT64 *)v28[v11-- + 1];
v14 = v5;
PfnLink = MiGetPfnLink(v5);
*v16 = 0i64;
v5 = PfnLink;
if( v11 == 3 )
{
*(_QWORD *)(v14 + 8) = MiGetPteAddress((PVOID)qword_140C4DB20);
MiSetPageTablePfnBuddy(v14, (INT64)v2, 0i64);
}
v17 = (v14 - (__int64)PfnDb) / 48;
ValidPte = MiMakeValidPte(0i64, v17, 2415919110i64);
if( v11 == 3 )
{
MiWriteTopLevelPxe(v13, ValidPte & 0xFFFFFFFFFFFFFEFFui64);
}
else
{
*v13 = ValidPte & 0xFFFFFFFFFFFFFEFFui64;
v2 = (void *)rcx0;
}
MiInitializePfnForOtherProcess(v17, (MMPTE *)v13, v12, 0x200ui64);
v12 = v17;
PfnDb = MmGetPfnDb();
}
while( v11 != 1 );
v19 = MiMakeValidPte((UINT64)PteAddress, 0i64, 2684354564i64);
v20 = 0;
v21 = (UINT64 *)MiGetPteAddress((PVOID)qword_140C4DB20);
v32 = PteAddress - (MMPTE *)v21;
do
{
BitMapHeader = (_RTL_BITMAP_EX *)v5;
v5 = MiGetPfnLink(v5);
v23 = (v22 - (__int64)MmGetPfnDb()) / 48;
if( !v20 )
{
v19 ^= (v19 ^ (v23 << 12)) & 0xFFFFFFFFF000i64;
v24 = MiGetPteAddress((PVOID)qword_140C4DB20);
*(_QWORD *)(v25 + 8) = v24;
MiSetPageTablePfnBuddy(v25, (INT64)v2, 0i64);
*(UINT64 *)((char *)v21 + v32) = v19;
}
v26 = MiMakeValidPte(0i64, v23, 2147483652i64) & 0xFFFFFFFFFFFFFEFFui64;
MiInitializePfn(BitMapHeader, v21, 4ui64);
*v21 = v26;
v2 = (void *)rcx0;
++v20;
++v21;
}
while( v20 < 5 );
return MiGetNextPageColor((INT64)v28);
}Referenced by:
MiSessionCreateInternal