VslCreateEnclave
NTSTATUS __stdcall VslCreateEnclave(
INT64 rcx0,
INT64 rdx0,
INT64 r8_0,
INT64 a4,
INT64 a5,
INT64 a6,
UINT64 a7,
CHAR a8,
INT64 a9){
NTSTATUS result;
int v14;
__int64 v15[2];
INT64 v16[10];
INT64 v17[14];
v15[0] = 0i64;
memset(v17, 0i64, 0x68u);
memset(v16, 0i64, 0x48u);
if( !*(_QWORD *)(rdx0 + 992) )
{
result = VslCreateSecureProcess(rdx0, r8_0, v15);
if( result < 0 )
return result;
if( _InterlockedCompareExchange64((volatile signed __int64 *)(rdx0 + 992), v15[0], 0i64) )
VslCloseSecureHandle(v15[0]);
}
if( !(_DWORD)a7 || (result = VslpLockPagesForTransfer((INT64)v16, a6, (unsigned int)a7, 0i64, 0), result >= 0) )
{
v17[1] = *(_QWORD *)(rdx0 + 992);
v17[3] = a5;
v17[5] = v16[0];
v17[6] = v16[7];
v17[7] = (unsigned __int8)a8;
v17[2] = a4;
v17[4] = rcx0;
v14 = VslpEnterIumSecureMode(2u, 45, 0i64, (INT64)v17);
if( v16[0] )
VslpUnlockPagesForTransfer((INT64 **)v16);
if( v14 >= 0 )
*(_QWORD *)a9 = v17[2];
return v14;
}
return result;
}Referenced by:
PsCreateVsmEnclave