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