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