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