У меня есть процесс X, в который я вливаю свою DLL, чтобы обойти некоторые функции и сделать некоторые исправления памяти.Мне нужно обойти ShellExecuteEx()
, потому что этот процесс запускает другие процессы, а затем мне нужно также внедрить мою DLL в дочерние процессы.
Кажется, что моя обходная функция нормально вызывается, и когда я вызываюоригинальная функция, она возвращает TRUE.Но затем процесс, в который внедряется моя DLL, закрывается через несколько секунд, когда он вызывается (пока не было введено никакого дочернего процесса, так как я не кодировал его).Есть идеи почему?
static BOOL(WINAPI *t_ShellExecuteExW)(SHELLEXECUTEINFOW *pExecInfo) = ShellExecuteExW;
BOOL d_ShellExecuteExW(SHELLEXECUTEINFOW *pExecInfo)
{
BOOL result;
printf("ShellExecuteEx %ls \n", pExecInfo->lpFile);
try
{
result = t_ShellExecuteExW(pExecInfo);
}
catch (const std::exception& e)
{
printf("Exception %s", e.what());
}
if (result)
printf("Result True");
else
printf("Result False");
return result;
}
void makeHooks()
{
HMODULE module = LIBpatching_loadLibrary("shell32.dll", 10000);
FARPROC address;
if ((address = GetProcAddress(module, "ShellExecuteExW")) != nullptr)
{
printf("[shell32] [ShellExecuteExW] Address found\n");
LIBpatching_hookFunction((PBYTE)address, (PBYTE)d_ShellExecuteExW);
}
}