[XAM] - Replacing Unk

- Replacing unk parameters
- Naming unk xmp calls
- Added missing xmp structs
- Added missing messenger structs
- Added missing XamProfileCreate related structs
This commit is contained in:
The-Little-Wolf
2025-06-18 08:27:00 -07:00
committed by Radosław Gliński
parent fd82727be6
commit 6314388c51
13 changed files with 198 additions and 55 deletions

View File

@@ -26,15 +26,31 @@ X_RESULT MessengerApp::DispatchMessageSync(uint32_t message,
auto buffer = memory_->TranslateVirtual(buffer_ptr);
switch (message) {
case 0x00200002: {
// Used on start in blades dashboard v5759 (marketplace update) and 6717
XELOGD("MessengerUnk200002({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
// Used on blades dashboard v5759 - 6717 when requesting to sign out
assert_true(!buffer_length || buffer_length == 12);
struct {
xe::be<uint32_t> user_index;
xe::be<uint32_t> unk1;
xe::be<uint32_t> unk2;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
static_assert_size(decltype(*args), 12);
XELOGD("MessengerUnk200002({:08X}, {:08X}, {:08X}), unimplemented",
args->user_index.get(), args->unk1.get(), args->unk2.get());
return X_E_FAIL;
}
case 0x00200018: {
// Used on logging out in blades 6717
XELOGD("MessengerUnk200018({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
// Used after signing out in blades 6717
assert_true(!buffer_length || buffer_length == 12);
struct {
xe::be<uint32_t> user_index;
xe::be<uint32_t> unk1;
xe::be<uint32_t> unk2;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
static_assert_size(decltype(*args), 12);
XELOGD("MessengerUnk200018({:08X}, {:08X}, {:08X}), unimplemented",
args->user_index.get(), args->unk1.get(), args->unk2.get());
return X_E_FAIL;
}
}

View File

@@ -138,8 +138,15 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
case 0x0002B003: {
// Games used in:
// 4D5309C9
XELOGD("XamUnk2B003({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
// It only receives buffer
struct {
xe::be<uint64_t> unk1;
xe::be<uint64_t> unk2;
xe::be<uint64_t> unk3;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
XELOGD("XamUnk2B003({:016X}, {:016X}, {:016X}), unimplemented",
args->unk1.get(), args->unk2.get(), args->unk3.get());
return X_E_SUCCESS;
}
}

View File

@@ -250,8 +250,8 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
// Called after opening xbox live arcade and clicking on xbox live v5759
// to 5787 and called after clicking xbox live in the game library from
// v6683 to v6717
XELOGD("XGIUnkB0036({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
// Does not get sent a buffer
XELOGD("XInvalidateGamerTileCache, unimplemented");
return X_E_FAIL;
}
case 0x000B003D: {
@@ -320,8 +320,8 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
property);
}
case 0x000B0071: {
XELOGD("XGIUnkB0071({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
XELOGD("ContentEnumerate::ResetEnumerator({:08X}, {:08X}), unimplemented",
buffer_ptr, buffer_length);
return X_E_SUCCESS;
}
}

View File

@@ -397,6 +397,8 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
// XMPCreateUserPlaylistEnumerator
// For whatever reason buffer_length is 0 in this case.
// Return buffer size is set to be items * 0x338 bytes.
// Games used in:
// 54540809, 494707D4
return X_E_SUCCESS;
}
case 0x00070029: {
@@ -439,10 +441,26 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
return X_E_SUCCESS;
}
case 0x0007002B: {
// XMPGetMediaSources
// Called on the NXE and Kinect dashboard after clicking on the picture,
// video, and music library
XELOGD("XMPUnk7002B({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
assert_true(!buffer_length || buffer_length == 20);
struct {
xe::be<uint32_t> xmp_client;
xe::be<uint32_t> unk1;
xe::be<uint32_t> unk2;
xe::be<uint32_t> unk3;
xe::be<uint32_t> unk4;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
static_assert_size(decltype(*args), 20);
assert_true(args->xmp_client == 0x00000002 ||
args->xmp_client == 0x00000000);
XELOGD(
"XMPGetMediaSources({:08X}, {:08X}, {:08X}, {:08X}, {:08X}), "
"unimplemented",
args->xmp_client.get(), args->unk1.get(), args->unk2.get(),
args->unk3.get(), args->unk4.get());
return X_E_INVALIDARG;
}
case 0x0007002E: {
@@ -464,9 +482,26 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
return X_E_SUCCESS;
}
case 0x0007002F: {
// XMPDashInIt
// Called on the start up of all dashboard versions before kinect
XELOGD("XMPUnk7002F({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
assert_true(!buffer_length || buffer_length == 24);
struct {
xe::be<uint32_t> xmp_client;
xe::be<uint32_t> unk1;
xe::be<uint32_t> unk2;
xe::be<uint32_t> unk3;
xe::be<uint32_t> unk4;
xe::be<uint32_t> storage_ptr;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
static_assert_size(decltype(*args), 24);
assert_true(args->xmp_client == 0x00000002 ||
args->xmp_client == 0x00000000);
XELOGD(
"XMPDashInIt({:08X}, {:08X}, {:08X}, {:08X}, {:08X}, {:08X}), "
"unimplemented",
args->xmp_client.get(), args->unk1.get(), args->unk2.get(),
args->unk3.get(), args->unk4.get(), args->storage_ptr.get());
return X_E_INVALIDARG;
}
case 0x0007003D: {
@@ -488,19 +523,41 @@ X_HRESULT XmpApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
return X_E_SUCCESS;
}
case 0x00070044: {
// XMPSetMediaSourceWorkspace
// Called on the start up of all dashboard versions before kinect
// When it returns X_E_INVALIDARG you can access the music player up to
// version 5787
XELOGD("XMPUnk70044({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
assert_true(!buffer_length || buffer_length == 16);
struct {
xe::be<uint32_t> xmp_client;
xe::be<uint32_t> unk1;
xe::be<uint32_t> storage_ptr;
xe::be<uint32_t> unk2;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
static_assert_size(decltype(*args), 16);
assert_true(args->xmp_client == 0x00000002 ||
args->xmp_client == 0x00000000);
XELOGD(
"XMPSetMediaSourceWorkspace({:08X}, {:08X}, {:08X}, {:08X}), "
"unimplemented",
args->xmp_client.get(), args->unk1.get(), args->storage_ptr.get(),
args->unk2.get());
return X_E_INVALIDARG;
}
case 0x00070053: {
// Called on the blades dashboard after clicking on the picture,
// video, and music library in rapid succession then freezes
// it only recieves buffer
XELOGD("XMPUnk70053({:08X}, {:08X}), unimplemented", buffer_ptr,
buffer_length);
// Called on the blades dashboard Version 4532-5787 after clicking on the
// picture or video library. It only receives buffer
struct {
xe::be<uint32_t> xmp_client;
xe::be<uint32_t> unk1;
}* args = memory_->TranslateVirtual<decltype(args)>(buffer_ptr);
static_assert_size(decltype(*args), 8);
assert_true(args->xmp_client == 0x00000002 ||
args->xmp_client == 0x00000000);
XELOGD("XMPUnk70053({:08X}, {:08X}), unimplemented",
args->xmp_client.get(), args->unk1.get());
return X_E_SUCCESS;
}
}