From d4d425f61aed7dcd9d24bb2a4eb4c523aed63d4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=87=E9=80=B8?= Date: Sat, 13 Sep 2025 00:04:27 +0800 Subject: [PATCH] Add fallback for MrmGetFilePathFromName --- dev/MRTCore/mrt/Core/src/MRM.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/dev/MRTCore/mrt/Core/src/MRM.cpp b/dev/MRTCore/mrt/Core/src/MRM.cpp index c66a549185..c3973aaa72 100644 --- a/dev/MRTCore/mrt/Core/src/MRM.cpp +++ b/dev/MRTCore/mrt/Core/src/MRM.cpp @@ -988,6 +988,7 @@ STDAPI MrmGetFilePathFromName(_In_opt_ PCWSTR filename, _Outptr_ PWSTR* filePath BaseDirForModulePri, exeDirForResourcesPri, exeDirForModulePri, + DefaultFallback, Final, }; SearchPass searchStart = SearchPass::exeDirForFileName; @@ -1052,6 +1053,18 @@ STDAPI MrmGetFilePathFromName(_In_opt_ PCWSTR filename, _Outptr_ PWSTR* filePath searchFilename = modulePriFileName; pass = SearchPass::Final; break; + case SearchPass::DefaultFallback: + searchDir = exeDir.get(); + searchDirCount = exeDirCount; + if (filename == nullptr || *filename == L'\0') + { + searchFilename = ResourcesPriFileName; + } + else + { + searchFilename = filename; + } + break; } size_t searchFilenameCount; @@ -1074,13 +1087,14 @@ STDAPI MrmGetFilePathFromName(_In_opt_ PCWSTR filename, _Outptr_ PWSTR* filePath PATHCCH_ALLOW_LONG_PATHS)); DWORD attributes = GetFileAttributes(outputPath.get()); - if ((attributes != INVALID_FILE_ATTRIBUTES) && !(attributes & FILE_ATTRIBUTE_DIRECTORY)) + if ((pass == SearchPass::DefaultFallback) || + ((attributes != INVALID_FILE_ATTRIBUTES) && !(attributes & FILE_ATTRIBUTE_DIRECTORY))) { // The file exists. Done. *filePath = outputPath.release(); - return S_OK; + break; } } - return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + return S_OK; }