[User] Add some extra checks from XAM to Read/WriteProfileSettings exports
This commit is contained in:
parent
1b8b01af8d
commit
e11abb8efa
|
@ -225,8 +225,12 @@ dword_result_t XamUserReadProfileSettings(
|
||||||
dword_t title_id, dword_t user_index, dword_t num_xuids, lpqword_t xuids,
|
dword_t title_id, dword_t user_index, dword_t num_xuids, lpqword_t xuids,
|
||||||
dword_t setting_count, lpdword_t setting_ids, lpdword_t buffer_size_ptr,
|
dword_t setting_count, lpdword_t setting_ids, lpdword_t buffer_size_ptr,
|
||||||
lpvoid_t buffer_ptr, dword_t overlapped_ptr) {
|
lpvoid_t buffer_ptr, dword_t overlapped_ptr) {
|
||||||
uint32_t buffer_size =
|
if (!setting_count || setting_count > 0x20 || !setting_ids ||
|
||||||
!buffer_size_ptr ? 0u : static_cast<uint32_t>(*buffer_size_ptr);
|
!buffer_size_ptr) {
|
||||||
|
assert_always();
|
||||||
|
// XAM doesn't seem to set the overlapped error here
|
||||||
|
return X_ERROR_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t xuid = 0;
|
uint64_t xuid = 0;
|
||||||
if (num_xuids && xuids) {
|
if (num_xuids && xuids) {
|
||||||
|
@ -244,7 +248,6 @@ dword_result_t XamUserReadProfileSettings(
|
||||||
if (overlapped_ptr) {
|
if (overlapped_ptr) {
|
||||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
||||||
X_ERROR_NOT_FOUND);
|
X_ERROR_NOT_FOUND);
|
||||||
return X_ERROR_IO_PENDING;
|
|
||||||
}
|
}
|
||||||
return X_ERROR_NOT_FOUND;
|
return X_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -282,7 +285,9 @@ dword_result_t XamUserReadProfileSettings(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t buffer_size = static_cast<uint32_t>(*buffer_size_ptr);
|
||||||
*buffer_size_ptr = size_needed;
|
*buffer_size_ptr = size_needed;
|
||||||
|
|
||||||
if (!buffer_ptr || buffer_size < size_needed) {
|
if (!buffer_ptr || buffer_size < size_needed) {
|
||||||
if (overlapped_ptr) {
|
if (overlapped_ptr) {
|
||||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
||||||
|
@ -381,11 +386,8 @@ dword_result_t XamUserWriteProfileSettings(
|
||||||
dword_t title_id, dword_t user_index, dword_t setting_count,
|
dword_t title_id, dword_t user_index, dword_t setting_count,
|
||||||
pointer_t<X_USER_WRITE_PROFILE_SETTING> settings, dword_t overlapped_ptr) {
|
pointer_t<X_USER_WRITE_PROFILE_SETTING> settings, dword_t overlapped_ptr) {
|
||||||
if (!setting_count || !settings) {
|
if (!setting_count || !settings) {
|
||||||
if (overlapped_ptr) {
|
assert_always();
|
||||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
// XAM doesn't seem to set the overlapped error here
|
||||||
X_ERROR_INVALID_PARAMETER);
|
|
||||||
return X_ERROR_IO_PENDING;
|
|
||||||
}
|
|
||||||
return X_ERROR_INVALID_PARAMETER;
|
return X_ERROR_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,7 +397,6 @@ dword_result_t XamUserWriteProfileSettings(
|
||||||
if (overlapped_ptr) {
|
if (overlapped_ptr) {
|
||||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
||||||
X_ERROR_NOT_FOUND);
|
X_ERROR_NOT_FOUND);
|
||||||
return X_ERROR_IO_PENDING;
|
|
||||||
}
|
}
|
||||||
return X_ERROR_NOT_FOUND;
|
return X_ERROR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -410,7 +411,6 @@ dword_result_t XamUserWriteProfileSettings(
|
||||||
if (overlapped_ptr) {
|
if (overlapped_ptr) {
|
||||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr,
|
||||||
X_ERROR_INVALID_PARAMETER);
|
X_ERROR_INVALID_PARAMETER);
|
||||||
return X_ERROR_IO_PENDING;
|
|
||||||
}
|
}
|
||||||
return X_ERROR_INVALID_PARAMETER;
|
return X_ERROR_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue