在线程中创建 CreateDialog卡死

gyixue 2020-03-26 02:02:24
小弟新人,做了一个远程注入DLL的例子,注入到目标进程后,新建线程,然后在线程中创建一个对话框,对话框选择的是 非模态对话框 用CreateDialog创建的。
问题出现在这里了,因为对话框卡住了,过会来带目标进程一起崩溃。找了好久都没找到解决办法,有哪位大神帮忙看看吧,下面上代码:

窗口过程
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT UMsg, WPARAM wParam, LPARAM lParam) {

switch (UMsg)
{
case WM_CLOSE:
CloseHandle(hNewThread);
EndDialog(hwndDlg, 0);
break;
}


switch (UMsg)
{
case WM_CLOSE:
::PostQuitMessage(0);
case WM_COMMAND:
break;

}

return ::DefWindowProc(hwndDlg, UMsg, wParam, lParam);
}


创建窗口的线程
DWORD WINAPI New_Thread(LPVOID lpParam) {

HWND hwnd= CreateDialog(hModule, (LPCSTR)IDC_DLG, NULL, DialogProc);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);

MSG msg = {0};

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}


DLLmain 入口
BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstDll);

//InstallMonitor();
hModule = hInstDll;
//DialogBox(hInstDll, (LPCSTR)IDC_DLG, NULL, DialogProc);
hNewThread = CreateThread(NULL, NULL, &New_Thread, 0, 0, NULL);
break;

case DLL_PROCESS_DETACH:

break;

}
return TRUE;
}
...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyixue 2020-03-26
  • 打赏
  • 举报
回复
引用 4 楼 真相重于对错 的回复:
多线程访问UI,需要发送消息。


难住我了, 我刚学,您的介绍太笼统,让我一脑子浆糊, 而且我这是需要在宿主进程内执行的代码,宿主应该不会给我发送的消息的。
真相重于对错 2020-03-26
  • 打赏
  • 举报
回复
多线程访问UI,需要发送消息。
gyixue 2020-03-26
  • 打赏
  • 举报
回复
我在网上找到相关的介绍了, 但是我看见有部分的人的程序,没有经过特别的加工 也能在dll创建ui不知道咋做到的
引用 1 楼 真相重于对错 的回复:
我记得多线程,不特别修改,除主线程外不能直接使用ui
gyixue 2020-03-26
  • 打赏
  • 举报
回复
自己顶一下
真相重于对错 2020-03-26
  • 打赏
  • 举报
回复
我记得多线程,不特别修改,除主线程外不能直接使用ui

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧