MiAssignSoftwareWsleRegion

INT64 __fastcall MiAssignSoftwareWsleRegion(INT64 a1, UINT64 a2){
  INT64 v4; 
  __int64 v5; 
  unsigned int i; 
  UINT64 v7; 
  _QWORD *v8; 
  __int64 v9; 
  __int16 v10; 
  INT64 v11; 
  struct _RTL_BITMAP BitMapHeader; 
  int v13; 
  _DWORD v14[9]; 
  __int64 v15; 
  INT64 result[8]; 
  *(&BitMapHeader.SizeOfBitMap + 1) = 0;
  memset(v14, 0, 12);
  memset(&v14[6], 0, 12);
  memset((INT64)result, 0i64);
  BitMapHeader.SizeOfBitMap = 512;
  BitMapHeader.Buffer = (unsigned int *)result;
  v4 = (INT64)MmGetPml4eBase() + 8 * ((a2 >> 39) & 0x1FF);
  if( (MI_READ_PTE_LOCK_FREE(v4) & 1) != 0 )
  {
    v5 = ((v4 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
    for( i = 0; i < 0x200; ++i )
    {
      if( MI_READ_PTE_LOCK_FREE(v5) )
        _bittestandset((signed __int32 *)result, i);
      v5 += 8i64;
    }
  }
  v14[5] = 1;
  v7 = a2 & 0xFFFFFF8000000000ui64;
  v8 = &v14[1];
  v13 = 0;
  *(_QWORD *)&v14[3] = 0x1000000000i64;
  v9 = 2i64;
  v15 = 0x80000000i64;
  do
  {
    v10 = ExGenRandom(1i64);
    *v8 = v7
        + ((unsigned __int64)RtlFindClearBitsAndSet(
                               &BitMapHeader,
                               ((unsigned __int64)(v8[1] + 0x3FFFFFFFi64) >> 30) + 1,
                               v10 & 0x1FF) << 30);
    v8 += 3;
    --v9;
  }
  while( v9 );
  qword_140C4E070 = *(_QWORD *)&v14[1];
  qword_140C4E078 = *(_QWORD *)&v14[1];
  qword_140C4E080 = *(_QWORD *)&v14[1];
  qword_140C4DF90 = v15;
  qword_140C4DF88 = *(VOID **)&v14[7];
  *(_QWORD *)(*(_QWORD *)(a1 + 240) + 2928i64) = *(_QWORD *)&v14[7];
  v11 = qword_140C4DF90;
  *(_QWORD *)(*(_QWORD *)(a1 + 240) + 2936i64) = qword_140C4DF90;
  return v11;
}

Referenced by:

MiInitializeSystemVa