[XAM] Assert struct sizes and misc struct adjustments
This commit is contained in:
@@ -97,8 +97,8 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||
static_cast<uint32_t>(data->device_type_ptr.get()));
|
||||
|
||||
switch (kernel_state_->deployment_type_) {
|
||||
case XDeploymentType::kGoD:
|
||||
case XDeploymentType::kHardDrive: {
|
||||
case XDeploymentType::kDownload:
|
||||
case XDeploymentType::kInstalledToHDD: {
|
||||
*device_type_ptr = DeviceType::HDD;
|
||||
} break;
|
||||
case XDeploymentType::kOpticalDisc: {
|
||||
@@ -123,11 +123,12 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||
return X_E_SUCCESS;
|
||||
}
|
||||
case 0x00022005: {
|
||||
struct message_data {
|
||||
struct XTITLE_GET_DEPLOYMENT_TYPE {
|
||||
xe::be<uint32_t> deployment_type_ptr;
|
||||
xe::be<uint32_t> overlapped_ptr;
|
||||
}* data = reinterpret_cast<message_data*>(buffer);
|
||||
assert_true(buffer_length == sizeof(message_data));
|
||||
}* data = reinterpret_cast<XTITLE_GET_DEPLOYMENT_TYPE*>(buffer);
|
||||
assert_true(!buffer_length ||
|
||||
buffer_length == sizeof(XTITLE_GET_DEPLOYMENT_TYPE));
|
||||
auto deployment_type =
|
||||
memory_->TranslateVirtual<uint32_t*>(data->deployment_type_ptr);
|
||||
*deployment_type = static_cast<uint32_t>(kernel_state_->deployment_type_);
|
||||
|
||||
@@ -25,9 +25,10 @@ namespace apps {
|
||||
*/
|
||||
|
||||
struct XGI_XUSER_ACHIEVEMENT {
|
||||
xe::be<uint32_t> user_idx;
|
||||
xe::be<uint32_t> user_index;
|
||||
xe::be<uint32_t> achievement_id;
|
||||
};
|
||||
static_assert_size(XGI_XUSER_ACHIEVEMENT, 0x8);
|
||||
|
||||
struct XGI_XUSER_GET_PROPERTY {
|
||||
xe::be<uint32_t> user_index;
|
||||
@@ -39,6 +40,7 @@ struct XGI_XUSER_GET_PROPERTY {
|
||||
xe::be<uint32_t> context_address;
|
||||
xe::be<uint32_t> property_address;
|
||||
};
|
||||
static_assert_size(XGI_XUSER_GET_PROPERTY, 0x20);
|
||||
|
||||
struct XGI_XUSER_SET_CONTEXT {
|
||||
xe::be<uint32_t> user_index;
|
||||
@@ -46,6 +48,7 @@ struct XGI_XUSER_SET_CONTEXT {
|
||||
xe::be<uint64_t> xuid;
|
||||
XUSER_CONTEXT context;
|
||||
};
|
||||
static_assert_size(XGI_XUSER_SET_CONTEXT, 0x18);
|
||||
|
||||
struct XGI_XUSER_SET_PROPERTY {
|
||||
xe::be<uint32_t> user_index;
|
||||
@@ -55,6 +58,7 @@ struct XGI_XUSER_SET_PROPERTY {
|
||||
xe::be<uint32_t> data_size;
|
||||
xe::be<uint32_t> data_address;
|
||||
};
|
||||
static_assert_size(XGI_XUSER_SET_PROPERTY, 0x20);
|
||||
|
||||
struct XUSER_STATS_VIEW {
|
||||
xe::be<uint32_t> ViewId;
|
||||
@@ -116,6 +120,8 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||
return X_E_SUCCESS;
|
||||
}
|
||||
case 0x000B0007: {
|
||||
assert_true(!buffer_length ||
|
||||
buffer_length == sizeof(XGI_XUSER_SET_PROPERTY));
|
||||
const XGI_XUSER_SET_PROPERTY* xgi_property =
|
||||
reinterpret_cast<const XGI_XUSER_SET_PROPERTY*>(buffer);
|
||||
|
||||
@@ -144,7 +150,8 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||
return X_E_SUCCESS;
|
||||
}
|
||||
case 0x000B0008: {
|
||||
assert_true(!buffer_length || buffer_length == 8);
|
||||
assert_true(!buffer_length ||
|
||||
buffer_length == sizeof(XGI_XUSER_ACHIEVEMENT));
|
||||
uint32_t achievement_count = xe::load_and_swap<uint32_t>(buffer + 0);
|
||||
uint32_t achievements_ptr = xe::load_and_swap<uint32_t>(buffer + 4);
|
||||
XELOGD("XGIUserWriteAchievements({:08X}, {:08X})", achievement_count,
|
||||
@@ -154,7 +161,7 @@ X_HRESULT XgiApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr,
|
||||
memory_->TranslateVirtual<XGI_XUSER_ACHIEVEMENT*>(achievements_ptr);
|
||||
for (uint32_t i = 0; i < achievement_count; i++, achievement++) {
|
||||
kernel_state_->achievement_manager()->EarnAchievement(
|
||||
achievement->user_idx, kernel_state_->title_id(),
|
||||
achievement->user_index, kernel_state_->title_id(),
|
||||
achievement->achievement_id);
|
||||
}
|
||||
return X_E_SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user