MiCreateVsmEnclave
INT64 __fastcall MiCreateVsmEnclave(INT64 a1, INT64 a2, INT64 a3, INT64 a4, UINT64 arg20){
ULONG_PTR *v7;
int v8;
_BYTE *v9;
INT64 a6;
INT64 v11;
bool a5;
int v13;
INT64 v14;
INT64 result;
UINT64 a7;
MiGetProcessPartition((_EPROCESS *)a1);
if( v7 == &MiSystemPartition )
v11 = 0i64;
else
v11 = v7[22];
a5 = v8 == 17;
v13 = 0;
if( (unsigned int)arg20 >= 4 && (*v9 & 1) != 0 )
v13 = 1;
v14 = (*(unsigned int *)(a2 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a2 + 32) << 32)) << 12;
LODWORD(a7) = arg20;
result = PsCreateVsmEnclave(
a1,
v11,
v14,
(((*(unsigned int *)(a2 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a2 + 33) << 32)) << 12) | 0xFFF)
- v14
+ 1,
a5,
a6,
a7,
a2 + 72);
if( (int)result >= 0 )
{
if( v13 )
{
*(_DWORD *)(a2 + 64) |= 4u;
_InterlockedAdd((volatile signed __int32 *)(*(_QWORD *)(a1 + 1680) + 296i64), 1u);
}
return 0i64;
}
return result;
}Referenced by:
MiCreateEnclave