如何在llmain中调用MessageBox
Howto call MessageBox in dllmain
我正在创建一个在dll注入POC(概念验证)中使用的小dll。我正在使用代码块的c++ ide。
我的dll的main (dllmain)看起来像这样:
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
MessageBox(0, "myfirstdll loaded", "SUCCESS STATUS", MB_OK);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}
现在,当我加载dll(使用LoadLibrary)从客户端程序(希望,它加载!),我的消息框不弹出。这很令人沮丧,因为我正在做poc。我知道安全问题盛行,当我们做kernel32.dll等密集的业务在dllmain,但是,我的问题在这里不是安全;我只需要在dllmain中弹出一个消息框。
那么,我如何使我的消息框弹出时,dll加载?
请参阅此问题以了解DllMain
中的大量限制。这不仅仅是安全问题。user32导出的任何内容都属于这一类。
换句话说,您不能在DllMain
中使用MessageBox
。使用OutputDebugString
之类的东西代替,它在kernel32中,不显示任何UI。
有很多有用的东西,只是不能在DllMain中完成。阅读Raymond Chen博客上的所有相关文章获取更多信息。甚至不能延迟SetTimer
的执行,因为该函数在user32.dll中,并且该库可能尚未加载。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- WIN32:C++,为什么在WM_CLOSE上调用Messagebox函数程序正在冻结
- 如何在llmain中调用MessageBox
- 关于Cpp App CreateProcess()调用的c# App MessageBox.Show()的问题
- 为什么在没有返回变量的情况下调用MessageBox[etc]()会导致程序崩溃?