From dcb98683cfe78e84b21d2a3e161bd6baebe95372 Mon Sep 17 00:00:00 2001 From: "chss95cs@gmail.com" Date: Mon, 1 May 2023 09:32:33 -0400 Subject: [PATCH] Replace most magic numbers from previous commit with named constants, if the constants names are known. Instead of low 32 bits of ptr, use hash of file path for sector information. --- src/xenia/kernel/info/volume.h | 6 +++++- src/xenia/kernel/xam/xam_info.cc | 8 +++++++- src/xenia/kernel/xboxkrnl/xboxkrnl_io_info.cc | 12 +++++------- src/xenia/kernel/xboxkrnl/xboxkrnl_rtl.cc | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/xenia/kernel/info/volume.h b/src/xenia/kernel/info/volume.h index 17befd577..28329ecfb 100644 --- a/src/xenia/kernel/info/volume.h +++ b/src/xenia/kernel/info/volume.h @@ -54,8 +54,12 @@ struct X_FILE_FS_ATTRIBUTE_INFORMATION { }; static_assert_size(X_FILE_FS_ATTRIBUTE_INFORMATION, 16); +enum X_FILE_DEVICE_TYPE : uint32_t { + FILE_DEVICE_UNKNOWN = 0x22 +}; + struct X_FILE_FS_DEVICE_INFORMATION { - be device_type; + be device_type; be characteristics; }; static_assert_size(X_FILE_FS_DEVICE_INFORMATION, 8); diff --git a/src/xenia/kernel/xam/xam_info.cc b/src/xenia/kernel/xam/xam_info.cc index 7cfaeb1f3..6ffaccc2e 100644 --- a/src/xenia/kernel/xam/xam_info.cc +++ b/src/xenia/kernel/xam/xam_info.cc @@ -418,7 +418,12 @@ dword_result_t XamAlloc_entry(dword_t flags, dword_t size, lpdword_t out_ptr) { } DECLARE_XAM_EXPORT1(XamAlloc, kMemory, kImplemented); -static const unsigned short XamPhysicalProtTable[4] = {2, 516, 4, 1028}; +static const unsigned short XamPhysicalProtTable[4] = { + X_PAGE_READONLY, + X_PAGE_READWRITE | X_PAGE_NOCACHE, + X_PAGE_READWRITE, + X_PAGE_WRITECOMBINE | X_PAGE_READWRITE +}; dword_result_t XamAllocEx_entry(dword_t phys_flags, dword_t flags, dword_t size, lpdword_t out_ptr, const ppc_context_t& ctx) { @@ -428,6 +433,7 @@ dword_result_t XamAllocEx_entry(dword_t phys_flags, dword_t flags, dword_t size, uint32_t flags_remapped = phys_flags; if ((phys_flags & 0xF000000) == 0) { + // setting default alignment flags_remapped = 0xC000000 | phys_flags & 0xF0FFFFFF; } diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_io_info.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_io_info.cc index 2bf94e41e..d042a723a 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_io_info.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_io_info.cc @@ -97,10 +97,9 @@ dword_result_t NtQueryInformationFile_entry( // arbitrary 4 byte integer most of the time XELOGW("Stub XFileSectorInformation!"); auto info = info_ptr.as(); - //low 32 bits of ptr. todo: maybe hash name? - *info = static_cast( - reinterpret_cast(file->file()->entry())); - out_length = 4; + size_t fname_hash = xe::memory::hash_combine(82589933LL, file->path()); + *info = static_cast(fname_hash ^ (fname_hash >> 32)); + out_length = sizeof(uint32_t); break; } case XFileXctdCompressionInformation: { @@ -347,10 +346,9 @@ dword_result_t NtQueryVolumeInformationFile_entry( auto info = info_ptr.as(); auto file_device = file->device(); XELOGW("Stub XFileFsDeviceInformation!"); - //FILE_DEVICE_UNKNOWN - info->device_type = 0x22; // 415608D8 checks for 0x46; + info->device_type = FILE_DEVICE_UNKNOWN; // 415608D8 checks for 0x46; info->characteristics = 0; - out_length = 8; + out_length = sizeof(X_FILE_FS_DEVICE_INFORMATION); break; } default: { diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_rtl.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_rtl.cc index 68cb64981..b537eccaf 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_rtl.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_rtl.cc @@ -449,7 +449,7 @@ dword_result_t RtlImageDirectoryEntryToData_entry(dword_t Base, dword_t MappedAs if (!nt_header) { return 0; } - if (nt_header->OptionalHeader.Magic != 0x10B) { + if (nt_header->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR32_MAGIC) { return 0; } if (DirectoryEntry >= nt_header->OptionalHeader.NumberOfRvaAndSizes) {