Я пытаюсь загрузить файл .dll
и вывести окно сообщения при загрузке. Насколько я понимаю, когда .dll
загружен, он вызывает dllmain()
и переключается на DLL_PROCESS_ATTACH
. Я написал код для .dll
и .exe
, который его загружает. .exe
может загрузить его правильно и распечатать адрес, по которому была загружена dll, но я не вижу отображаемого окна сообщения. Я где-то читал на Microsoft.com, что dll вводит «блокировку» при загрузке, чтобы предотвратить выполнение определенных функций или кода в целях безопасности. Эта функция блокирует отображение окна сообщения? Есть ли обходные пути, такие как повышенные привилегии, система и т. Д.? Я не уверен, что DEP также имеет какой-либо эффект, он настроен на защиту только критически важных процессов Windows.
Процесс вызова:
#include <iostream>
#include <windows.h>
int main()
{
HMODULE hDll = LoadLibraryA("dll.dll");
if (hDll == NULL)
std::cerr << "Unable to load dll";
else
std::cout << "Dll loaded @ " << hDll;
FreeLibrary(hDll);
}
Файл dll:
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "Dll has been loaded.", "Loaded", MB_OK);
break;
}
return TRUE;
}
Я думаю, это могло бы помочь мне, если бы у меня был способ запустить .dll
через отладчик и посмотреть, что вернул MessageBox()
, но я не уверен, как это сделать. Спасибо!