VslPrepareSecureImageRelocations

NTSTATUS __stdcall VslPrepareSecureImageRelocations(
        INT64 a1,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        UINT64 a6,
        INT64 a7,
        INT64 a8){
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  NTSTATUS result; 
  int v13; 
  INT64 v16[10]; 
  INT64 v17[10]; 
  INT64 v18[10]; 
  INT64 v19[14]; 

  memset(v19, 0i64, 0x68u);
  memset(v16, 0i64, 0x48u);
  memset(v18, 0i64, 0x48u);
  memset(v17, 0i64, 0x48u);
  v10 = ((unsigned __int64)(a3 & 0xFFF) + a4 + 4095) >> 12;
  if( v10 > 0x1FA )
    return -1073741811;
  v11 = ((unsigned __int64)(a7 & 0xFFF) + a8 + 4095) >> 12;
  if( v11 > 0x1FA )
    return -1073741811;
  if( !v10 || (result = VslpLockPagesForTransfer((INT64)v16, a3, (unsigned int)a4, 0i64, 0), result >= 0) )
  {
    if( v11 )
    {
      v13 = VslpLockPagesForTransfer((INT64)v17, a7, (unsigned int)a8, 0i64, 0);
      if( v13 < 0 )
      {
LABEL_7:
        VslpUnlockPagesForTransfer((INT64 **)v16);
        return v13;
      }
      v13 = VslpLockPagesForTransfer((INT64)v18, a5, (unsigned int)a6, 0i64, 0);
      if( v13 < 0 )
      {
        VslpUnlockPagesForTransfer((INT64 **)v17);
        goto LABEL_7;
      }
    }
    v19[1] = a1;
    v19[2] = a2;
    v19[3] = v16[0];
    v19[4] = v16[7];
    v19[5] = v18[0];
    v19[6] = v18[7];
    v19[7] = v17[0];
    v19[8] = v17[7];
    v13 = VslpEnterIumSecureMode(2u, 28, 0i64, (INT64)v19);
    if( v11 )
    {
      VslpUnlockPagesForTransfer((INT64 **)v17);
      VslpUnlockPagesForTransfer((INT64 **)v18);
    }
    if( !v10 )
      return v13;
    goto LABEL_7;
  }
  return result;
}

Referenced by:

No references.