From 99fd19d02598e45121a665053c56fa46b2e06f09 Mon Sep 17 00:00:00 2001 From: Gliniak <153369+Gliniak@users.noreply.github.com> Date: Fri, 5 Jun 2026 13:27:45 +0200 Subject: [PATCH] [XAM] Limit XContentQueryVolumeDeviceType to XContent packages - Changed mount path for XContent packages from Cdrom to Package_0 Normally it should generate specific value instead of 0, but for now 0 is enough --- src/xenia/emulator.cc | 2 +- src/xenia/kernel/xam/apps/xam_app.cc | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/xenia/emulator.cc b/src/xenia/emulator.cc index adc628563..22cd25220 100644 --- a/src/xenia/emulator.cc +++ b/src/xenia/emulator.cc @@ -545,7 +545,7 @@ X_STATUS Emulator::LaunchPath(const std::filesystem::path& path) { case FileSignatureType::LIVE: case FileSignatureType::CON: case FileSignatureType::PIRS: { - mount_result = MountPath(path, "\\Device\\Cdrom0"); + mount_result = MountPath(path, "\\Device\\Package_0"); return mount_result ? mount_result : LaunchStfsContainer(path); } break; case FileSignatureType::XISO: { diff --git a/src/xenia/kernel/xam/apps/xam_app.cc b/src/xenia/kernel/xam/apps/xam_app.cc index c76d3dcfe..5faf3b8f9 100644 --- a/src/xenia/kernel/xam/apps/xam_app.cc +++ b/src/xenia/kernel/xam/apps/xam_app.cc @@ -111,6 +111,17 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr, }* data = reinterpret_cast(buffer); assert_true(buffer_length == sizeof(XContentQueryVolumeDeviceType)); + std::string target; + if (!kernel_state_->file_system()->FindSymbolicLink( + std::string(data->root_name) + ':', target)) { + return X_E_INVALIDARG; + } + + // Only apply this check to XContent packages + if (!target.starts_with("\\Device\\Package_")) { + return X_E_INVALIDARG; + } + xe::be* device_type_ptr = memory_->TranslateVirtual*>( static_cast(data->device_type_ptr.get()));