Я пытаюсь загрузить файл .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()
вернуло, но я не уверен, как это сделать. Спасибо!
DllMain
в первый раз, когда вы делаете что-то существенное с библиотекой. - person ta.speot.is   schedule 19.12.2011