微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获得一个DLL加载过程句柄

我试图得到从DLL加载DLL的过程的句柄。

我的方法是:在DLL_PROCESS_ATTACH我调用EnumWindows(EnumWindowsProc,NULL);

我的EnumWindowsProc实现如下:

BOOL CALLBACK EnumWindowsProc(HWND hWnd,LParaM lParam) { if(GetCurrentProcessId() == GetwindowThreadProcessId(hWnd,NULL)){ MessageBox(hWnd,L"I loaded your dll!",L"it's me",MB_OK); return TRUE; } return FALSE; }

问题是,GetCurrentProcessId()== GetwindowThreadProcessId(hWnd,NULL)从来没有真正的(如果我放置在if块的一切工作,但它被调用每个列出的窗口之外的messageBox调用)。

我可以挂钩链接库中的函数吗?

在Windows上检测进程内存注入(防黑客)

Windows允许的文件名是安全的注射? (sql,JavaScript等)

内存分析 – VAD标签代码注入

在两个进程(C,Windows)之间共享内存

有没有其他方法可以说明问题? 这种做法是完全错误的还是我错过了一些东西?

提前感谢

挂钩Linux上用户间的sycalls

如何使用SetwindowsHookEx和WH_KEYBOARD钩住外部进程

没有注入dll

dynamic大小的数组在裸露的function

将类注入到JVM中并与现有的类进行交互

使用GetCurrentProcess ,它返回当前进程的伪句柄。 如果你需要一个真正的句柄,把伪句柄传递给DuplicateHandle 。

请注意,在DllMain做太多是非常危险的。 调用除KERNEL32函数以外的任何内容都是非常危险的,即使如此,也有一些KERNEL32函数不应该被调用。 请参阅DllMain文档, 本文以及Microsoft开发人员的多篇 博文 ,建议不要在DllMain中做太多事情。

最简单的方法就是在需要处理时简单地使用GetCurrentProcess 。

尝试调用GetProcessHandleFromHwnd() 。

你犯了一个错误

GetwindowThreadProcessId不返回进程ID,但是返回线程ID。

你的程序必须是这样写的:

BOOL CALLBACK EnumWindowsProc(HWND hWnd,LParaM lParam) { DWORD process; GetwindowThreadProcessId(hWnd,&process); if(GetCurrentProcessId() == process){ MessageBox(hWnd,MB_OK); return TRUE; } return FALSE; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐