Files
2025-05-18 13:04:45 +08:00

41 lines
1.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
//typedef struct _MODLOAD_DATA {} *PMODLOAD_DATA;
using SHGetKnownFolderPathFunc = HRESULT(REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PWSTR* ppszPath);
SHGetKnownFolderPathFunc* True_SHGetKnownFolderPath;
HRESULT Detoured_SHGetKnownFolderPath(REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PWSTR* ppszPath)
{
if (g_runningRemote)
{
UBA_ASSERT(hToken == NULL);
RPC_MESSAGE(SHGetKnownFolderPath, getFullFileName)
writer.WriteBytes(&rfid, sizeof(KNOWNFOLDERID));
writer.WriteU32(dwFlags);
writer.Flush();
BinaryReader reader;
HRESULT res = reader.ReadU32();
*ppszPath = NULL;
if (res == S_OK)
{
StringBuffer<> path;
reader.ReadString(path);
u32 memSize = (path.count+1)*2;
void* mem = CoTaskMemAlloc(memSize);
UBA_ASSERT(mem);
if (!mem)
return E_FAIL;
memcpy(mem, path.data, memSize);
*ppszPath = (PWSTR)mem;
}
DEBUG_LOG_DETOURED(L"SHGetKnownFolderPath", L"(%ls) -> %ls", *ppszPath, ToString(res == S_OK));
return res;
}
SuppressDetourScope _;
HRESULT res = True_SHGetKnownFolderPath(rfid, dwFlags, hToken, ppszPath);
DEBUG_LOG_TRUE(L"SHGetKnownFolderPath", L"(%ls) -> %ls", *ppszPath, ToString(res == S_OK));
return res;
}