[Xam/Xam_Profile] - Stub XamProfileCreate and more

- Move XamProfileFindAccount
- Leave notes for XamProfileOpen
- Stub XamProfileCreate
This commit is contained in:
The-Little-Wolf 2025-01-11 20:20:45 -08:00 committed by Radosław Gliński
parent e134bbccd1
commit a77213dcdb
2 changed files with 45 additions and 30 deletions

View File

@ -15,7 +15,40 @@ namespace xe {
namespace kernel { namespace kernel {
namespace xam { namespace xam {
dword_result_t XamProfileOpen_entry(qword_t xuid, lpstring_t mount_path) { dword_result_t XamProfileFindAccount_entry(
qword_t offline_xuid, pointer_t<X_XAMACCOUNTINFO> account_ptr,
lpdword_t device_id) {
if (!account_ptr) {
return X_ERROR_INVALID_PARAMETER;
}
account_ptr.Zero();
const auto& account =
kernel_state()->xam_state()->profile_manager()->GetAccount(offline_xuid);
if (!account) {
return X_ERROR_NO_SUCH_USER;
}
std::memcpy(account_ptr, &account, sizeof(X_XAMACCOUNTINFO));
xe::string_util::copy_and_swap_truncating(
account_ptr->gamertag, account->gamertag, sizeof(account->gamertag));
if (device_id) {
*device_id = 1;
}
return X_ERROR_SUCCESS;
}
DECLARE_XAM_EXPORT1(XamProfileFindAccount, kUserProfiles, kImplemented);
dword_result_t XamProfileOpen_entry(qword_t xuid, lpstring_t mount_path,
dword_t flags, lpvoid_t content_data) {
/* Notes:
- If xuid is not local then returns X_ERROR_INVALID_PARAMETER
*/
const bool result = const bool result =
kernel_state()->xam_state()->profile_manager()->MountProfile( kernel_state()->xam_state()->profile_manager()->MountProfile(
xuid, mount_path.value()); xuid, mount_path.value());
@ -24,6 +57,17 @@ dword_result_t XamProfileOpen_entry(qword_t xuid, lpstring_t mount_path) {
} }
DECLARE_XAM_EXPORT1(XamProfileOpen, kNone, kImplemented); DECLARE_XAM_EXPORT1(XamProfileOpen, kNone, kImplemented);
dword_result_t XamProfileCreate_entry(dword_t flags, lpdword_t device_id,
qword_t xuid,
pointer_t<X_XAMACCOUNTINFO> account,
dword_t unk1, dword_t unk2, dword_t unk3,
dword_t unk4) {
// **unk4
return X_ERROR_SUCCESS;
}
DECLARE_XAM_EXPORT1(XamProfileCreate, kNone, kStub);
} // namespace xam } // namespace xam
} // namespace kernel } // namespace kernel
} // namespace xe } // namespace xe

View File

@ -844,35 +844,6 @@ dword_result_t XamUserCreateStatsEnumerator_entry(
} }
DECLARE_XAM_EXPORT1(XamUserCreateStatsEnumerator, kUserProfiles, kSketchy); DECLARE_XAM_EXPORT1(XamUserCreateStatsEnumerator, kUserProfiles, kSketchy);
dword_result_t XamProfileFindAccount_entry(
qword_t offline_xuid, pointer_t<X_XAMACCOUNTINFO> account_ptr,
lpdword_t device_id) {
if (!account_ptr) {
return X_ERROR_INVALID_PARAMETER;
}
account_ptr.Zero();
const auto& account =
kernel_state()->xam_state()->profile_manager()->GetAccount(offline_xuid);
if (!account) {
return X_ERROR_NO_SUCH_USER;
}
std::memcpy(account_ptr, &account, sizeof(X_XAMACCOUNTINFO));
xe::string_util::copy_and_swap_truncating(
account_ptr->gamertag, account->gamertag, sizeof(account->gamertag));
if (device_id) {
*device_id = 1;
}
return X_ERROR_SUCCESS;
}
DECLARE_XAM_EXPORT1(XamProfileFindAccount, kUserProfiles, kImplemented);
} // namespace xam } // namespace xam
} // namespace kernel } // namespace kernel
} // namespace xe } // namespace xe