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