RtlCalculateUserShadowStackSizes

NTSTATUS __fastcall RtlCalculateUserShadowStackSizes(INT64 a1, UINT64 *a2){
  UINT64 v3; 
  NTSTATUS result; 
  UINT64 v6; 
  __int64 v7; 
  ULONGLONG *v8; 
  UINT64 v9; 
  ULONGLONG v10; 
  ULONGLONG pullResult; 
  ULONGLONG v12; 
  v12 = 0i64;
  v3 = *(_QWORD *)(a1 + 16);
  pullResult = 0i64;
  result = RtlULongLongSub(v3, *(_QWORD *)(a1 + 32), &pullResult);
  if( result >= 0 )
  {
    result = RtlULongLongSub(v6, *(_QWORD *)(v7 + 24), &v12);
    if( result >= 0 )
    {
      v9 = pullResult;
      if( pullResult < 0x1000 || (pullResult & 0xFFF) != 0 || v12 < 0x1000 || (v12 & 0xFFF) != 0 || v12 > pullResult )
      {
        return -1073741811;
      }
      else
      {
        v10 = (v12 / 5 + 4095) & 0xFFFFFFFFFFFFF000ui64;
        *v8 = v10;
        if( v9 < v10 + 0x2000 )
          v9 = v10 + 0x2000;
        *a2 = v9;
      }
    }
  }
  return result;
}

Referenced by:

PspSetupUserShadowStack