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