41 lines
1.2 KiB
C++
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;
|
|
}
|