VslCreateEnclave
NTSTATUS __fastcall VslCreateEnclave(
INT64 a1,
INT64 a2,
INT64 a3,
INT64 a4,
INT64 a5,
INT64 a6,
UINT64 a7,
CHAR a8,
INT64 a9){
NTSTATUS SecureProcess;
int v14;
_QWORD a3a[2];
INT64 v16[10];
INT64 result[2];
INT64 v18;
INT64 v19;
INT64 v20;
INT64 v21;
INT64 v22;
__int64 v23;
a3a[0] = 0i64;
memset((INT64)result, 0i64);
memset((INT64)v16, 0i64);
if( !*(_QWORD *)(a2 + 992) )
{
SecureProcess = VslCreateSecureProcess(a2, a3, a3a);
if( SecureProcess < 0 )
return SecureProcess;
if( _InterlockedCompareExchange64((volatile signed __int64 *)(a2 + 992), a3a[0], 0i64) )
VslCloseSecureHandle(a3a[0]);
}
if( !(_DWORD)a7
|| (SecureProcess = VslpLockPagesForTransfer((INT64)v16, a6, (unsigned int)a7, 0i64, 0), SecureProcess >= 0) )
{
result[1] = *(_QWORD *)(a2 + 992);
v19 = a5;
v21 = v16[0];
v22 = v16[7];
v23 = (unsigned __int8)a8;
v18 = a4;
v20 = a1;
v14 = VslpEnterIumSecureMode(2u, 45, 0i64, (INT64)result);
if( v16[0] )
VslpUnlockPagesForTransfer((INT64 **)v16);
if( v14 >= 0 )
*(_QWORD *)a9 = v18;
return v14;
}
return SecureProcess;
}Referenced by:
PsCreateVsmEnclave