diff --git a/src/xenia/kernel/xam/xam_media.cc b/src/xenia/kernel/xam/xam_media.cc new file mode 100644 index 000000000..feefd30eb --- /dev/null +++ b/src/xenia/kernel/xam/xam_media.cc @@ -0,0 +1,72 @@ +/** + ****************************************************************************** + * Xenia : Xbox 360 Emulator Research Project * + ****************************************************************************** + * Copyright 2024 Xenia Canary. All rights reserved. * + * Released under the BSD license - see LICENSE in the root for more details. * + ****************************************************************************** + */ + +#include "xenia/kernel/util/shim_utils.h" +#include "xenia/kernel/xam/xam_private.h" +#include "xenia/kernel/xthread.h" +#include "xenia/xbox.h" + +namespace xe { +namespace kernel { +namespace xam { + +dword_result_t XamMediaVerificationCreate_entry(dword_t creation_flags) { + return X_ERROR_SUCCESS; +} +DECLARE_XAM_EXPORT1(XamMediaVerificationCreate, kNone, kStub); + +dword_result_t XamMediaVerificationClose_entry() { return X_ERROR_SUCCESS; } +DECLARE_XAM_EXPORT1(XamMediaVerificationClose, kNone, kStub); + +dword_result_t XamMediaVerificationVerify_entry( + dword_t r3, pointer_t overlapped, lpvoid_t callback) { + if (callback) { + auto thread = XThread::GetCurrentThread(); + thread->EnqueueApc(static_cast(callback) & ~1u, 0, 0, 0); + } + return X_ERROR_SUCCESS; +} +DECLARE_XAM_EXPORT1(XamMediaVerificationVerify, kNone, kStub); + +struct X_SECURITY_FAILURE_INFORMATION { + xe::be size; + xe::be failed_reads; + xe::be failed_hashes; + xe::be blocks_checked; + xe::be total_blocks; + xe::be complete; +}; + +dword_result_t XamMediaVerificationFailedBlocks_entry( + pointer_t failure_information) { + if (failure_information) { + if (failure_information->size != sizeof(X_SECURITY_FAILURE_INFORMATION)) { + return X_ERROR_NOT_ENOUGH_MEMORY; + } + + failure_information->failed_reads = 0; + failure_information->failed_hashes = 0; + failure_information->blocks_checked = 0; + failure_information->total_blocks = 0; + failure_information->complete = true; + } + return X_ERROR_SUCCESS; +} +DECLARE_XAM_EXPORT1(XamMediaVerificationFailedBlocks, kNone, kStub); + +dword_result_t XamMediaVerificationInject_entry(dword_t r3, dword_t r4) { + return X_ERROR_SUCCESS; +} +DECLARE_XAM_EXPORT1(XamMediaVerificationInject, kNone, kStub); + +} // namespace xam +} // namespace kernel +} // namespace xe + +DECLARE_XAM_EMPTY_REGISTER_EXPORTS(Media); \ No newline at end of file diff --git a/src/xenia/kernel/xam/xam_module_export_groups.inc b/src/xenia/kernel/xam/xam_module_export_groups.inc index 563b789a5..1795f7259 100644 --- a/src/xenia/kernel/xam/xam_module_export_groups.inc +++ b/src/xenia/kernel/xam/xam_module_export_groups.inc @@ -18,6 +18,7 @@ XE_MODULE_EXPORT_GROUP(xam, Enum) XE_MODULE_EXPORT_GROUP(xam, Info) XE_MODULE_EXPORT_GROUP(xam, Input) XE_MODULE_EXPORT_GROUP(xam, Locale) +XE_MODULE_EXPORT_GROUP(xam, Media) XE_MODULE_EXPORT_GROUP(xam, Msg) XE_MODULE_EXPORT_GROUP(xam, Net) XE_MODULE_EXPORT_GROUP(xam, Notify) diff --git a/src/xenia/xbox.h b/src/xenia/xbox.h index ddcdb99dd..d0ee1296c 100644 --- a/src/xenia/xbox.h +++ b/src/xenia/xbox.h @@ -93,6 +93,7 @@ typedef uint32_t X_RESULT; #define X_ERROR_PATH_NOT_FOUND X_RESULT_FROM_WIN32(0x00000003L) #define X_ERROR_ACCESS_DENIED X_RESULT_FROM_WIN32(0x00000005L) #define X_ERROR_INVALID_HANDLE X_RESULT_FROM_WIN32(0x00000006L) +#define X_ERROR_NOT_ENOUGH_MEMORY X_RESULT_FROM_WIN32(0x00000008L) #define X_ERROR_NO_MORE_FILES X_RESULT_FROM_WIN32(0x00000012L) #define X_ERROR_NOT_SUPPORTED X_RESULT_FROM_WIN32(0x00000032L) #define X_ERROR_INVALID_PARAMETER X_RESULT_FROM_WIN32(0x00000057L)