MiAssignSystemVa
NTSTATUS __stdcall MiAssignSystemVa(UINT32 NumberToFind){
unsigned int v1;
unsigned int v2;
ULONG v4;
int v5;
unsigned __int8 v6;
ULONG ClearBitsAndSet;
ULONG v9;
struct _RTL_BITMAP BitMapHeader;
*(&BitMapHeader.SizeOfBitMap + 1) = 0;
v2 = v1;
BitMapHeader.SizeOfBitMap = 256;
BitMapHeader.Buffer = (unsigned int *)&xmmword_140C4DF98;
if( NumberToFind <= 2 )
{
v6 = ExGenRandom(1i64);
v5 = 8;
goto LABEL_7;
}
v4 = dword_140C4DFB8;
v5 = v1 >= 4 ? 0x10 : 0;
while( 1 )
{
ClearBitsAndSet = RtlFindClearBitsAndSet(&BitMapHeader, NumberToFind, v4);
if( ClearBitsAndSet == -1 )
return 0;
if( ClearBitsAndSet == v4 || !v5 )
break;
--v5;
RtlClearBits(&BitMapHeader, ClearBitsAndSet, NumberToFind);
v6 = ExGenRandom(1i64);
LABEL_7:
v4 = v6;
}
v9 = ClearBitsAndSet + NumberToFind;
if( v2 != 1 )
v9 = (unsigned __int8)(v9 + (unsigned int)ExGenRandom(1i64) % v2);
dword_140C4DFB8 = v9;
return 0;
}Referenced by:
MiAssignTopLevelRanges