MiCreateEnclaveRegions
UINT64 __stdcall MiCreateEnclaveRegions(_LOADER_PARAMETER_BLOCK *LoaderBlock){
_QWORD *v2;
__int64 *v3;
INT64 v4;
__int64 *i;
UINT64 v7;
UINT64 v8;
__int64 v9;
_QWORD *v10;
bool v11;
_QWORD *v12;
_QWORD *v13;
char *v14;
unsigned __int8 v15;
__int64 v16;
unsigned __int64 v17;
UINT64 BitsMustBeChanged;
__int64 *v19;
qword_140C4EBF0 = (__int64)&qword_140C4EBE8;
qword_140C4EBE8 = (__int64)&qword_140C4EBE8;
v2 = 0i64;
qword_140C4EBF8 = 0i64;
ExInitializePushLock((EX_RUNDOWN_REF *)&stru_140C4EC00);
v3 = (__int64 *)((char *)LoaderBlock + 32);
v4 = MiSwizzleInvalidPte(128i64);
v19 = v3;
for( i = (__int64 *)*v3; i != v3; i = (__int64 *)*i )
{
if( ((*((_DWORD *)i + 4) - 33) & 0xFFFFFFFD) != 0 )
continue;
v7 = i[3];
v8 = i[4];
if( v2 )
{
v9 = v2[4];
if( v7 == v9 + v2[3] )
{
v2[4] = v9 + v8;
goto LABEL_16;
}
}
LODWORD(v10) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
v2 = v10;
if( !v10 )
return 0i64;
v10[3] = v7;
v11 = 0;
v10[4] = v8;
v12 = (_QWORD *)qword_140C4EBC0;
if( !qword_140C4EBC0 )
goto LABEL_15;
while( v7 < v12[3] )
{
v13 = (_QWORD *)*v12;
if( !*v12 )
goto LABEL_15;
LABEL_20:
v12 = v13;
}
v13 = (_QWORD *)v12[1];
if( v13 )
goto LABEL_20;
v11 = 1;
LABEL_15:
RtlAvlInsertNodeEx((unsigned __int64 *)&qword_140C4EBC0, (__int64)v12, v11, v2);
LABEL_16:
LODWORD(BitsMustBeChanged) = 0;
MiUpdateLargePageBitMap((UINT64)&MiSystemPartition, v7, v8, 0i64, BitsMustBeChanged);
v14 = (char *)MmGetPfnDb() + 48 * v7;
if( v8 )
{
do
{
v15 = MiLockPageInline((INT64)v14);
v16 = *((_QWORD *)v14 + 5);
v17 = v15;
*((_QWORD *)v14 + 3) &= 0x8000000000000000ui64;
*((_WORD *)v14 + 16) = 0;
*((_QWORD *)v14 + 2) = v4;
*((_QWORD *)v14 + 5) = v16 & 0x8FFFFFFFFFFFFFFFui64 | 0x1000000000000000i64;
if( *((_DWORD *)i + 4) == 33 )
MiInsertPageInFreeOrZeroedList(v7, 0x100ui64);
else
MiInitializeMdlPfn((INT64)v14, 0i64);
_InterlockedAnd64((volatile signed __int64 *)v14 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v17);
v14 += 48;
++v7;
--v8;
}
while( v8 );
v3 = v19;
}
qword_140C4ECF8 -= i[4];
}
return !qword_140C4EBC0 || (unsigned int)MiInitializeEnclaveMetadataPage();
}Referenced by:
MiInitSystem