diff --git a/stratosphere/fs_mitm/source/fsmitm_service.hpp b/stratosphere/fs_mitm/source/fsmitm_service.hpp index 6e565f69d..8ebe9cba9 100644 --- a/stratosphere/fs_mitm/source/fsmitm_service.hpp +++ b/stratosphere/fs_mitm/source/fsmitm_service.hpp @@ -3,6 +3,7 @@ #include #include "imitmserviceobject.hpp" #include "fs_istorage.hpp" +#include "fsmitm_utils.hpp" enum class FspSrvCmd { SetCurrentProcess = 1, @@ -21,7 +22,12 @@ class FsMitMService : public IMitMServiceObject { } static bool should_mitm(u64 pid, u64 tid) { - return tid >= 0x0100000000010000ULL; + if (tid >= 0x0100000000010000ULL) { + return true; + } + bool has_romfs_content; + Result rc = Utils::HasSdRomfsContent(tid, &has_romfs_content); + return R_SUCCEEDED(rc) && has_romfs_content; } FsMitMService *clone() override { diff --git a/stratosphere/fs_mitm/source/fsmitm_utils.cpp b/stratosphere/fs_mitm/source/fsmitm_utils.cpp index 90e310a35..720dcac4f 100644 --- a/stratosphere/fs_mitm/source/fsmitm_utils.cpp +++ b/stratosphere/fs_mitm/source/fsmitm_utils.cpp @@ -121,3 +121,19 @@ Result Utils::OpenRomFSDir(FsFileSystem *fs, u64 title_id, const char *path, FsD } return fsFsOpenDirectory(fs, safe_path, FS_DIROPEN_DIRECTORY | FS_DIROPEN_FILE, out); } + +Result Utils::HasSdRomfsContent(u64 title_id, bool *out) { + Result rc; + FsDir dir; + if (R_FAILED((rc = Utils::OpenRomFSSdDir(title_id, "", &dir)))) { + return rc; + } + + FsDirectoryEntry dir_entry; + u64 read_entries; + if (R_SUCCEEDED((rc = fsDirRead(&dir, 0, &read_entries, 1, &dir_entry)))) { + *out = (read_entries == 1); + } + fsDirClose(&dir); + return rc; +} \ No newline at end of file diff --git a/stratosphere/fs_mitm/source/fsmitm_utils.hpp b/stratosphere/fs_mitm/source/fsmitm_utils.hpp index d14cbd764..a301fbcc9 100644 --- a/stratosphere/fs_mitm/source/fsmitm_utils.hpp +++ b/stratosphere/fs_mitm/source/fsmitm_utils.hpp @@ -15,4 +15,6 @@ class Utils { static Result OpenRomFSFile(FsFileSystem *fs, u64 title_id, const char *fn, int flags, FsFile *out); static Result OpenRomFSDir(FsFileSystem *fs, u64 title_id, const char *path, FsDir *out); + + static Result HasSdRomfsContent(u64 title_id, bool *out); }; \ No newline at end of file