gpt4 book ai didi

delphi - GetModuleFileNameEx 线程 ID?

转载 作者:行者123 更新时间:2023-12-01 22:35:23 36 4
gpt4 key购买 nike

我正在尝试获取线程 ID 的文件路径。我希望这会起作用..但事实并非如此

NtOpenThread(@hProc, THREAD_ALL_ACCESS, @ObjAttr, @ClientID) ;
pBuf := AllocMem(MAX_PATH);
GetModuleFileNameEx(hProc, 0, pBuf, MAX_PATH);

知道它是如何完成的吗?

最佳答案

GetModuleFileNameEx 需要进程句柄,而不是线程句柄,这解释了为什么您的代码不起作用。获取进程句柄有两种主要方法。第一个来自 CreateProcess,但除非您是启动该进程的人,否则这没什么好处,而且如果您这样做,那么您一开始就不需要 GetModuleFileNameEx。

获取进程句柄的第二种方法是从 OpenProcess 获取。这需要一个进程 ID。您可以使用 GetProcessIdOfThread 获取线程的进程 ID,它采用线程句柄。您已经知道如何使用 NtOpenThread 从线程 ID 获取线程句柄,尽管通常的函数是普通的旧 OpenThread。

如果您的 Windows 版本不支持 GetProcessIdOfThread,您可以使用 Thread32First 和 Thread32Next 走另一条路。调用CreateToolhelp32Snapshot,然后遍历线程列表。查找 th32ThreadID 等于您感兴趣的线程 ID 的条目。找到它后,th32OwnerProcessID 将保存相应的进程 ID。调用 OpenProcess 并按上述方式进行。

另请注意,打开线程或进程时不必请求 ALL_ACCESS 权限,尝试这样做可能会导致程序失败。仅请求完成任务所需的最低权限。当您不知道自己需要什么时,请求所有访问权限是一种懒惰的方法,但只有当您的程序已经具有管理权限时,它才有效。相反,花时间弄清楚您真正需要哪些权限。

关于delphi - GetModuleFileNameEx 线程 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18479270/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com