MiAssignSessionRanges
INT64 __stdcall MiAssignSessionRanges(){
__int64 v0;
__int64 v1;
__int64 v2;
__int64 v3;
unsigned int v4;
__int64 v5;
__int64 *v6;
__int64 v7;
ULONG v8;
int v9;
unsigned __int64 v10;
ULONG ClearBitsAndSet;
INT64 v12;
struct _RTL_BITMAP BitMapHeader;
INT64 result;
__int64 v15[9];
INT64 v16;
INT64 v17[8];
*(&BitMapHeader.SizeOfBitMap + 1) = 0;
memset((INT64)&result, 0i64);
memset((INT64)v17, 0i64);
BitMapHeader.SizeOfBitMap = 512;
BitMapHeader.Buffer = (unsigned int *)v17;
v0 = 0i64;
do
{
v1 = 3 * v0;
LODWORD(v15[v1 - 1]) = v0;
v0 = (unsigned int)(v0 + 1);
v15[v1 + 1] = 0x2000000000i64;
}
while( (int)v0 < 2 );
v2 = qword_140C4F8A8;
v3 = 3 * v0;
LODWORD(v15[v3 - 1]) = v0;
v15[v3 + 1] = 0x1000000000i64;
v4 = v0 + 1;
v5 = 3i64 * v4;
LODWORD(v15[v5 - 1]) = v4;
v15[v5 + 1] = 290816i64;
v6 = v15;
v7 = 4i64;
v8 = ExGenRandom(1i64) & 0x1FF;
do
{
v9 = 16;
v10 = (unsigned __int64)(v6[1] + 0x3FFFFFFF) >> 30;
if( (unsigned int)v10 < 0x20 )
{
v8 = ExGenRandom(1i64) & 0x1FF;
v9 = 0;
}
while( 1 )
{
ClearBitsAndSet = RtlFindClearBitsAndSet(&BitMapHeader, v10, v8);
if( ClearBitsAndSet == v8 || !v9 )
break;
--v9;
RtlClearBits(&BitMapHeader, ClearBitsAndSet, (unsigned int)v10);
v8 = ExGenRandom(1i64) & 0x1FF;
}
*v6 = v2 + ((unsigned __int64)ClearBitsAndSet << 30);
v6 += 3;
v8 = ((_WORD)ClearBitsAndSet + (_WORD)v10 + (unsigned __int8)ExGenRandom(1i64)) & 0x1FF;
--v7;
}
while( v7 );
qword_140C4CAE0 = v15[0];
qword_140C4CAE8 = v15[3];
qword_140C4E068 = v15[6];
v12 = v16;
qword_140C4DB20 = v16;
qword_140C4DB18 = v2;
return v12;
}Referenced by:
MiInitializeDynamicVa