我正在嘗試加載.dll
文件,並在加載時顯示消息框。根據我的理解,一旦加載了.dll
,它會撥打電話dllmain()
並切換到DLL_PROCESS_ATTACH
選項。我已經編寫了.dll
和加載它的.exe
的代碼。 .exe
可以正確加載並打印出已加載dll的地址,但我看不到正在顯示的消息框。我在Microsoft.com上的某個地方讀到,dll在加載時會進入「鎖定」狀態,以防止爲了安全目的而執行某些功能或代碼。此功能是否阻止顯示消息框?有沒有像升級的特權,系統等等的工作?我不確定DEP是否也有影響,我已經設置爲只保護關鍵的Windows進程。DLL_PROCESS_ATTACH無法在Windows 7上執行C++
調用進程:
#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()
返回,但我不知道該怎麼做。謝謝!
只是猜測在這裏,但你*實際上沒有做任何事情*除了名爲「加載」它的DLL以外 - 你可能會發現Windows在你第一次做大量事情時會懶惰地調用'DllMain'圖書館。 – 2011-12-19 04:06:51
@coolcoder:你說得對,使用調試器會有幫助。 – bk1e 2011-12-19 08:59:45