MiAssignTopLevelRanges
NTSTATUS __stdcall MiAssignTopLevelRanges(UINT64 HINTDelta){
_QWORD *v1;
_QWORD *v2;
__int64 v3;
int i;
__int64 v5;
__int64 v6;
_DWORD *v7;
__int64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
int v12;
int v13;
__int64 v14;
_DWORD *v15;
INT64 **v16;
__int64 v17;
unsigned __int64 v18;
__int64 v19;
INT64 **v20;
INT64 *v21;
__int64 v22;
__int64 v23;
__int64 v24;
INT64 *Base[40];
v2 = v1;
memset(Base, 0i64, 0x138u);
*v2 = 0i64;
v3 = 0i64;
for( i = 0; i < 4; ++i )
{
v5 = 3 * v3;
v3 = (unsigned int)(v3 + 1);
LODWORD(Base[v5]) = i;
Base[v5 + 2] = (INT64 *)0x100000000000i64;
}
v6 = 3 * v3;
LODWORD(Base[v6]) = 4;
v7 = (_DWORD *)Base + 1;
Base[v6 + 2] = (INT64 *)0x100000000000i64;
v8 = 5i64;
do
{
*v7 = ExGenRandom(ExGenRandomDomainUserVisible);
v7 += 6;
--v8;
}
while( v8 );
qsort((UINT64)Base, 5ui64, 0x18ui64, (INT64)MiRegionAssignmentSort, Base[0], (UINT64)Base[1], (UINT64)Base[2]);
LODWORD(Base[15]) = 5;
Base[17] = (INT64 *)0x38000000000i64;
LODWORD(Base[18]) = 6;
v9 = 7i64;
Base[20] = (INT64 *)0x28000000000i64;
LODWORD(Base[21]) = 7;
LODWORD(v10) = MiHyperSpaceSize();
LODWORD(v11) = 8;
LODWORD(Base[24]) = 8;
Base[23] = (INT64 *)(((v10 + 0x7FFFFFFFFFi64) & 0xFFFFFF8000000000ui64) + 0x8000000000i64);
v12 = 0;
Base[26] = (INT64 *)0x10000000000i64;
do
{
v11 = (unsigned int)(v11 + 1);
v13 = v12 + 9;
++v12;
v14 = 3 * v11;
LODWORD(Base[v14]) = v13;
Base[v14 + 2] = (INT64 *)0x8000000000i64;
}
while( v12 < 4 );
v15 = (_DWORD *)&Base[18] + 1;
do
{
*v15 = ExGenRandom(ExGenRandomDomainUserVisible);
v15 += 6;
--v9;
}
while( v9 );
qsort((UINT64)&Base[21], 6ui64, 0x18ui64, (INT64)MiRegionAssignmentSort, Base[0], (UINT64)Base[1], (UINT64)Base[2]);
v16 = &Base[2];
v17 = 13i64;
do
{
if( *((_DWORD *)v16 - 4) == 12 )
{
v23 = (_QWORD)MmGetPteBase() << 25;
v24 = 3i64;
v19 = (((_QWORD)&MmGetPml4eBase()[(0x140000000ui64 >> 39) & 0x1FF] << 25) - v23) >> 16;
do
{
v19 = ((v19 << 25) - v23) >> 16;
--v24;
}
while( v24 );
}
else
{
v18 = ((unsigned __int64)*v16 + 0x7FFFFFFFFFi64) & 0xFFFFFF8000000000ui64;
*v16 = (INT64 *)v18;
LODWORD(v19) = MiAssignSystemVa(v18 >> 39);
if( !v19 )
return v19;
}
*(v16 - 1) = (INT64 *)v19;
LODWORD(v9) = v9 + 1;
v16 += 3;
}
while( (unsigned int)v9 < 0xD );
v20 = Base;
do
{
v21 = v20[1];
v22 = *(int *)v20;
v20 += 3;
v22 *= 2i64;
*((_QWORD *)&stru_140C4DB30 + v22 + 923) = v21;
*((_QWORD *)&stru_140C4DB30 + v22 + 924) = *(v20 - 1);
--v17;
}
while( v17 );
MiAddSubRegionEntropy();
LODWORD(v19) = 1;
return v19;
}Referenced by:
MiInitializeSystemVa