VslIumEfiRuntimeService

UINT64 __fastcall VslIumEfiRuntimeService(UINT64 a1, INT64 a2, UINT64 a3, _OWORD *a4){
  INT64 v5; 
  unsigned int v6; 
  UINT64 v8; 
  __int128 v9; 
  unsigned __int8 CurrentIrql; 
  NTSTATUS v11; 
  __int128 v12; 
  UINT64 v13; 
  INT64 v14[10]; 
  INT64 result[5]; 
  __int128 v16; 
  __int128 v17; 
  v5 = (unsigned int)a1;
  v6 = a3;
  memset((INT64)result, 0i64);
  memset((INT64)v14, 0i64);
  if( a2 )
  {
    LODWORD(v8) = VslpLockPagesForTransfer((INT64)v14, a2, v6, 2i64, 1);
    if( (v8 & 0x80000000) != 0i64 )
      return(int)v8;
  }
  result[2] = v14[0];
  result[3] = v14[7];
  result[1] = v5;
  if( a4 )
  {
    v9 = a4[1];
    v16 = *a4;
    v17 = v9;
  }
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xFui64);
  ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)&VslpIumEfiLock);
  v11 = VslpEnterIumSecureMode(2u, 250, 0i64, (INT64)result);
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&VslpIumEfiLock);
  __writecr8(CurrentIrql);
  if( a4 )
  {
    v12 = v17;
    *a4 = v16;
    a4[1] = v12;
  }
  if( v11 == -1073741811 )
  {
    v13 = 0x8000000000000002ui64;
  }
  else if( v11 == -1073741801 )
  {
    v13 = 0x8000000000000009ui64;
  }
  else
  {
    v13 = result[4];
    if( v11 )
      v13 = 0x8000000000000003ui64;
  }
  if( v14[0] )
    VslpUnlockPagesForTransfer((INT64 **)v14);
  return v13;
}

Referenced by:

No references.