![](/img/trans.png)
[英]instancing com object allowed in dllmain() / DLL_PROCESS_ATTACH?
[英]DLL_PROCESS_ATTACH failing to execute on Windows 7 C++
我正在尝试加载.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()
返回了什么,那可能会对我有帮助,但是我不确定该怎么做。 谢谢!
雷蒙德·陈(Raymond Chen)在他的博客文章“ 一些不对您的DllMain做任何令人恐惧的事情的原因 ”中有话要说:
而且绝对不要在任何情况下都可以像在DLL_PROCESS_ATTACH中创建一个窗口一样疯狂。 除了线程相似性问题外,还存在全局挂钩的问题。 在装载机锁内部运行的挂钩是灾难的根源。 如果您的计算机出现死锁,请不要感到惊讶。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.