Итак, у меня есть приложение, которое запускает другое приложение с моей внедренной DLL (с помощью Detours). Точка входа - DllMain. Я не могу сделать многое из DllMain, и, конечно, не могу зациклить. Итак, как мне вызывать функции монитора DLL каждые x секунд? Я читал, что вы не можете создать поток из DllMain (по крайней мере, пока он не вернется) и его истина, потому что он разбил меня. Поэтому я попытался создать его в событии присоединения потока, и это привело меня к сбою. Итак, теперь я пытаюсь сделать это снова (в случае сбоя Detours), чтобы я мог получить дескриптор модуля. Затем я получаю адрес функции инициализатора, которая создает мой поток. У меня отлично работает дескриптор модуля, но я не думаю, что смогу получить адрес функции. Я сделал функцию пустой, и она все еще сбила меня. Так что это даже не доходит до вызова функции. Visual Studio сказала, что у меня нет прав на чтение.
Так что мне делать? Что вы делаете, чтобы зациклить свои функции DLL, когда у вас нет подключенной программы (exe).
//Application.exe
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
DetourCreateProcessWithDll(filename, NULL, NULL, NULL, TRUE,
CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, path,
&si, &pi, detoured, hook, NULL);
processID = pi.dwProcessId;
hDll = InjectDLL(processID, hook);
if(hDll != NULL)
{
STARTER Starter = (STARTER)GetProcAddress(hDll, "Starter");
if(Starter != NULL)
Starter();
}
ResumeThread(pi.hThread);
Функция стартера экспортирована из внешнего C и выглядит хорошо проверенной (порядковый номер 1).
Я понятия не имею, что может быть не так, и просто надеюсь, что кто-то там имел опыт работы с этой темой и сбоем.
Вот код DLL:
//Hook.h
extern "C"
{
void __declspec(dllexport) Starter(void);
}
//Hook.cpp
void Starter(void)
{
}
Спасибо