MiAssignSessionRanges
NTSTATUS __stdcall MiAssignSessionRanges(){
__int64 v0;
__int64 v1;
__int64 v2;
__int64 v3;
unsigned int v4;
__int64 v5;
char *v6;
__int64 v7;
unsigned int v8;
UINT8 *v9;
int v10;
unsigned __int64 v11;
UINT32 ClearBitsAndSet;
NTSTATUS result;
char Table[112];
_TABLE_SEARCH_RESULT SearchResult[16];
*(_DWORD *)&Table[4] = 0;
memset(&Table[16], 0i64, 0x60u);
memset(SearchResult, 0i64, sizeof(SearchResult));
*(_DWORD *)Table = 512;
*(_QWORD *)&Table[8] = SearchResult;
v0 = 0i64;
do
{
v1 = 3 * v0;
*(_DWORD *)&Table[8 * v1 + 16] = v0;
v0 = (unsigned int)(v0 + 1);
*(_QWORD *)&Table[8 * v1 + 32] = 0x2000000000i64;
}
while( (int)v0 < 2 );
v2 = *(&stru_140C4DB30 + 943);
v3 = 3 * v0;
*(_DWORD *)&Table[8 * v3 + 16] = v0;
*(_QWORD *)&Table[8 * v3 + 32] = 0x1000000000i64;
v4 = v0 + 1;
v5 = 3i64 * v4;
*(_DWORD *)&Table[8 * v5 + 16] = v4;
*(_QWORD *)&Table[8 * v5 + 32] = 290816i64;
v6 = &Table[24];
v7 = 4i64;
v8 = ExGenRandom(ExGenRandomDomainUserVisible) & 0x1FF;
do
{
v10 = 16;
v11 = (unsigned __int64)(*((_QWORD *)v6 + 1) + 0x3FFFFFFFi64) >> 30;
if( (unsigned int)v11 < 0x20 )
{
v8 = ExGenRandom(ExGenRandomDomainUserVisible) & 0x1FF;
v10 = 0;
}
while( 1 )
{
ClearBitsAndSet = (unsigned int)RtlFindClearBitsAndSet(
(_RTL_AVL_TABLE *)Table,
(VOID *)(unsigned int)v11,
v8,
v9,
*(VOID **)Table,
*(_TABLE_SEARCH_RESULT *)&Table[8]);
if( ClearBitsAndSet == v8 || !v10 )
break;
--v10;
RtlClearBits((PRTL_BITMAP)Table, ClearBitsAndSet, v11);
v8 = ExGenRandom(ExGenRandomDomainUserVisible) & 0x1FF;
}
*(_QWORD *)v6 = v2 + ((unsigned __int64)ClearBitsAndSet << 30);
v6 += 24;
v8 = ((_WORD)ClearBitsAndSet + (_WORD)v11 + (unsigned __int8)ExGenRandom(ExGenRandomDomainUserVisible)) & 0x1FF;
--v7;
}
while( v7 );
qword_140C4CAE0 = *(_QWORD *)&Table[24];
qword_140C4CAE8 = *(_QWORD *)&Table[48];
*(&stru_140C4DB30 + 167) = *(_QWORD *)&Table[72];
result = *(_DWORD *)&Table[96];
qword_140C4DB20 = *(_QWORD *)&Table[96];
qword_140C4DB18 = v2;
return result;
}Referenced by:
MiInitializeDynamicVa