VslCallEnclave
INT64 __fastcall VslCallEnclave(
INT64 a1,
INT64 *a2,
INT64 *a3,
INT64 a4,
INT64 *a5,
INT64 *a6,
INT64 *a7,
_DWORD *a8,
_BYTE *a9){
__int64 CurrentThread;
NTSTATUS v12;
int v14;
char MemoryDescriptorList[56];
INT64 result;
int v18;
int v19;
INT64 v20;
INT64 v21;
__int64 v22;
INT64 v23;
INT64 v24;
int v25;
char v26;
char v27;
v14 = a4;
memset((INT64)&result, 0i64);
*(_DWORD *)&MemoryDescriptorList[52] = 0;
CurrentThread = (__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((_MDL *)MemoryDescriptorList, 0, IoWriteAccess);
v18 = v14;
v19 = *(_DWORD *)(a1 + 40);
v20 = *a3;
v21 = *a5;
v22 = *(_QWORD *)&MemoryDescriptorList[48];
v26 = 0;
v23 = *a6;
v24 = *a7;
v12 = VslpEnterIumSecureMode(1u, 0, *(unsigned int *)a2, (INT64)&result);
if( v12 < 0 )
{
*a9 = 0;
}
else
{
*(_DWORD *)a2 = HIDWORD(result);
*a3 = v20;
*a5 = v21;
*a8 = v25;
*a6 = v23;
*a7 = v24;
*a9 = v27;
}
MmUnlockPages((_MDL *)MemoryDescriptorList);
if( v26 )
KeAlertThreadByThreadId(CurrentThread);
return(unsigned int)v12;
}Referenced by:
PsCallEnclave