VslCallEnclave
__int64 __fastcall VslCallEnclave(
__int64 a1,
int *a2,
__int64 *a3,
int a4,
__int64 *a5,
__int64 *a6,
__int64 *a7,
_DWORD *a8,
_BYTE *a9){
unsigned __int64 CurrentThread;
INT64 v12;
NTSTATUS v13;
INT64 v14;
char MemoryDescriptorList[56];
INT64 v19[14];
memset(v19, 0i64, 0x68u);
*(_DWORD *)&MemoryDescriptorList[52] = 0;
CurrentThread = (unsigned __int64)KeGetCurrentThread();
*(_QWORD *)MemoryDescriptorList = 0i64;
*(_WORD *)&MemoryDescriptorList[8] = 8 * (((unsigned __int16)((CurrentThread & 0xFFF) + 6295) >> 12) + 6);
memset(&MemoryDescriptorList[10], 0, 22);
*(_QWORD *)&MemoryDescriptorList[32] = CurrentThread & 0xFFFFFFFFFFFFF000ui64;
*(_QWORD *)&MemoryDescriptorList[44] = CurrentThread & 0xFFF;
*(_DWORD *)&MemoryDescriptorList[40] = 2200;
MmProbeAndLockPages((PMDL)MemoryDescriptorList, 0, IoWriteAccess);
LODWORD(v19[1]) = a4;
HIDWORD(v19[1]) = *(_DWORD *)(a1 + 40);
v19[2] = *a3;
v19[3] = *a5;
v19[4] = *(_QWORD *)&MemoryDescriptorList[48];
BYTE4(v19[7]) = 0;
v19[5] = *a6;
v19[6] = *a7;
v13 = VslpEnterIumSecureMode(1u, 0, (unsigned int)*a2, (INT64)v19);
if( v13 < 0 )
{
*a9 = 0;
}
else
{
*a2 = HIDWORD(v19[0]);
*a3 = v19[2];
*a5 = v19[3];
*a8 = v19[7];
*a6 = v19[5];
*a7 = v19[6];
*a9 = BYTE5(v19[7]);
}
MmUnlockPages((INT64)MemoryDescriptorList, v12, v14);
if( BYTE4(v19[7]) )
KeAlertThreadByThreadId((_KTHREAD *)CurrentThread);
return(unsigned int)v13;
}Referenced by:
PsCallEnclave