我试图得到从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等)
在两个进程(C,Windows)之间共享内存
有没有其他方法可以说明问题? 这种做法是完全错误的还是我错过了一些东西?
提前感谢
如何使用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] 举报,一经查实,本站将立刻删除。