MiMapNewSession
NTSTATUS __stdcall MiMapNewSession(_MM_SESSION_SPACE *SessionGlobal){
UINT64 v1;
_MM_SESSION_SPACE *v2;
ULONG_PTR *v3;
ULONG_PTR *v4;
__int64 v5;
__int64 v6;
_MMPFN *SystemPage;
__int64 v8;
_MMPFN *PfnDb;
__int64 v10;
__int64 v11;
__int64 v12;
_MMPTE *v13;
INT64 v14;
__int64 v15;
_QWORD *v16;
__int64 v17;
__int64 v18;
unsigned __int64 v19;
int v20;
unsigned __int64 v21;
unsigned __int64 v22;
unsigned int v23;
_MMPTE *v24;
__int64 v25;
__int64 v26;
__int64 v27;
_MMPTE *v28;
INT64 v29;
unsigned __int64 v30;
int v31;
__int64 v32;
unsigned __int64 v33;
int v34;
_QWORD ColorBase[2];
UINT64 v37[2];
__int128 v38;
_XSTATE_CONFIGURATION *PteAddress;
_XSTATE_CONFIGURATION *v41;
_RTL_BITMAP_EX *BitMapHeader;
v2 = SessionGlobal;
*(_OWORD *)ColorBase = 0i64;
*(_OWORD *)v37 = 0i64;
v38 = 0i64;
LODWORD(v3) = MiPartitionIdToPointer(v1, v1);
v4 = v3;
v5 = 0i64;
PteAddress = (_XSTATE_CONFIGURATION *)MiGetPteAddress(v2);
MiInitializePageColorBase(0i64, 0i64, (_MI_COLOR_BASE *)ColorBase);
v6 = 8i64;
do
{
SystemPage = MiGetSystemPage(v4, (_MI_COLOR_BASE *)ColorBase);
MiSetPfnLink(SystemPage, v5);
v5 = v8;
--v6;
}
while( v6 );
MiFillPteHierarchy(qword_140C4DB20, v37);
PfnDb = MmGetPfnDb();
v11 = 4i64;
v12 = (v10 - (__int64)PfnDb) / 48;
do
{
v13 = (_MMPTE *)ColorBase[v11-- + 1];
v14 = v5;
LODWORD(v15) = MiGetPfnLink(v5);
*v16 = 0i64;
v5 = v15;
if( v11 == 3 )
{
*(_QWORD *)(v14 + 8) = MiGetPteAddress((VOID *)qword_140C4DB20);
MiSetPageTablePfnBuddy(v14, (INT64)v2, 0i64);
}
v17 = (v14 - (__int64)PfnDb) / 48;
LODWORD(v18) = MiMakeValidPte(0i64, v17, 2415919110i64);
v19 = v18 & 0xFFFFFFFFFFFFFEFFui64;
if( v11 == 3 )
{
MiWriteTopLevelPxe((UINT64)v13, v18 & 0xFFFFFFFFFFFFFEFFui64);
}
else
{
LOBYTE(v20) = MiPteInShadowRange((UINT64)v13);
if( v20 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v19 & 1) != 0 )
v19 |= 0x8000000000000000ui64;
v13->u.Long = v19;
v2 = SessionGlobal;
}
MiInitializePfnForOtherProcess(v17, v13, v12, 0x200ui64);
v12 = v17;
PfnDb = MmGetPfnDb();
}
while( v11 != 1 );
LODWORD(v21) = MiMakeValidPte(PteAddress, 0i64, 2684354564i64);
v22 = v21;
v23 = 0;
v24 = MiGetPteAddress((VOID *)qword_140C4DB20);
v41 = (_XSTATE_CONFIGURATION *)((char *)PteAddress - (char *)v24);
do
{
BitMapHeader = (_RTL_BITMAP_EX *)v5;
LODWORD(v25) = MiGetPfnLink(v5);
v5 = v25;
v27 = (v26 - (__int64)MmGetPfnDb()) / 48;
if( !v23 )
{
v22 ^= (v22 ^ (v27 << 12)) & 0xFFFFFFFFF000i64;
v28 = MiGetPteAddress((VOID *)qword_140C4DB20);
*(_QWORD *)(v29 + 8) = v28;
MiSetPageTablePfnBuddy(v29, (INT64)v2, 0i64);
v30 = v22;
LOBYTE(v31) = MiPteInShadowRange((UINT64)v41 + (_QWORD)v24);
if( v31 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v22 & 1) != 0 )
v30 = v22 | 0x8000000000000000ui64;
*(unsigned __int64 *)((char *)&v41->EnabledFeatures + (_QWORD)v24) = v30;
}
LODWORD(v32) = MiMakeValidPte(0i64, v27, 2147483652i64);
v33 = v32 & 0xFFFFFFFFFFFFFEFFui64;
MiInitializePfn(BitMapHeader, &v24->u.Long, 4ui64);
LOBYTE(v34) = MiPteInShadowRange((UINT64)v24);
if( v34 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v33 & 1) != 0 )
v33 |= 0x8000000000000000ui64;
v24->u.Long = v33;
v2 = SessionGlobal;
++v23;
++v24;
}
while( v23 < 5 );
return MiGetNextPageColor((INT64)ColorBase);
}Referenced by:
MiSessionCreateInternal