MiAssignSoftwareWsleRegion

NTSTATUS __stdcall MiAssignSoftwareWsleRegion(INT64 a1, UINT64 a2){
  INT64 v4; 
  __int64 v5; 
  unsigned int i; 
  __int64 v7; 
  UINT64 v8; 
  char *v9; 
  __int64 v10; 
  __int16 v11; 
  UINT8 *v12; 
  NTSTATUS result; 
  char Table[128]; 

  *(_DWORD *)&Table[4] = 0;
  *(_QWORD *)&Table[20] = 0i64;
  *(_DWORD *)&Table[28] = 0;
  *(_QWORD *)&Table[44] = 0i64;
  *(_DWORD *)&Table[52] = 0;
  memset(&Table[64], 0i64, 0x40u);
  *(_DWORD *)Table = 512;
  *(_QWORD *)&Table[8] = &Table[64];
  v4 = (INT64)&MmGetPml4eBase()[(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 )
    {
      LODWORD(v7) = MI_READ_PTE_LOCK_FREE(v5);
      if( v7 )
        _bittestandset((signed __int32 *)&Table[64], i);
      v5 += 8i64;
    }
  }
  *(_DWORD *)&Table[40] = 1;
  v8 = a2 & 0xFFFFFF8000000000ui64;
  v9 = &Table[24];
  *(_DWORD *)&Table[16] = 0;
  *(_QWORD *)&Table[32] = 0x1000000000i64;
  v10 = 2i64;
  *(_QWORD *)&Table[56] = 0x80000000i64;
  do
  {
    v11 = ExGenRandom(ExGenRandomDomainUserVisible);
    *(_QWORD *)v9 = v8
                  + ((unsigned __int64)(unsigned int)RtlFindClearBitsAndSet(
                                                       (_RTL_AVL_TABLE *)Table,
                                                       (VOID *)((unsigned int)((unsigned __int64)(*((_QWORD *)v9 + 1)
                                                                                                + 0x3FFFFFFFi64) >> 30)
                                                              + 1),
                                                       v11 & 0x1FF,
                                                       v12,
                                                       *(VOID **)Table,
                                                       *(_TABLE_SEARCH_RESULT *)&Table[8]) << 30);
    v9 += 24;
    --v10;
  }
  while( v10 );
  *(&stru_140C4DB30 + 168) = *(_QWORD *)&Table[24];
  *(&stru_140C4DB30 + 169) = *(_QWORD *)&Table[24];
  *(&stru_140C4DB30 + 170) = *(_QWORD *)&Table[24];
  *(&stru_140C4DB30 + 140) = *(_QWORD *)&Table[56];
  *(&stru_140C4DB30 + 139) = *(_QWORD *)&Table[48];
  *(_QWORD *)(*(_QWORD *)(a1 + 240) + 2928i64) = *(_QWORD *)&Table[48];
  result = *(&stru_140C4DB30 + 280);
  *(_QWORD *)(*(_QWORD *)(a1 + 240) + 2936i64) = *(&stru_140C4DB30 + 140);
  return result;
}

Referenced by:

MiInitializeSystemVa