社区
进程/线程/DLL
帖子详情
不用GetModuleFileNameEx获取所有进程全路径的方法
yuruibo123
2007-08-23 11:23:38
我想获取所有的进程路径,我已经掌握了OpenProcess,GetModuleFileNameEx那种方法,但是现在不允许调用GetModuleFileNameEx这个函数,请问还有没有别的方法获取所有进程的全路径?
...全文
2321
16
打赏
收藏
不用GetModuleFileNameEx获取所有进程全路径的方法
我想获取所有的进程路径,我已经掌握了OpenProcess,GetModuleFileNameEx那种方法,但是现在不允许调用GetModuleFileNameEx这个函数,请问还有没有别的方法获取所有进程的全路径?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuruibo123
2007-08-27
打赏
举报
回复
按照linuxpgy(永远)的方法解决了 ,feimingbiao() 的方法我还没试,不过非常感谢大家!
sunlin7
2007-08-26
打赏
举报
回复
用GetCommandLine,然后解析也可以,但要用代码注入到各个进程中,反而不如GetModuleHandle好用。
yuruibo123
2007-08-26
打赏
举报
回复
谢谢大家的关注,我明天试试。
LanglyTiger
2007-08-25
打赏
举报
回复
放着GetModuleFileName这么容易的方法不用?
feimingbiao
2007-08-25
打赏
举报
回复
用 NtQueryInformationProcess, 第二个参数用 ProcessImageFileName 就可以了,返回的Buffer是UNICODE_STRING。
为什么不允许用 GetModuleFileNameEx?
linuxpgy
2007-08-25
打赏
举报
回复
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
void ShowModule(DWORD PID,char *strExePath)
{
HANDLE hSnapShot;
BOOL fOk;
hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,PID);
MODULEENTRY32 me={sizeof(me)};
for(fOk=Module32First(hSnapShot,&me);fOk;fOk=Module32Next(hSnapShot,&me))
{
if (strstr(me.szExePath,strExePath) != NULL)
{
printf("%s\n",me.szExePath);
}
}
}
void ShowProcess()
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
for(BOOL bOk=Process32First(hSnapshot,&pe);bOk;bOk=Process32Next(hSnapshot,&pe))
{
ShowModule(pe.th32ProcessID,pe.szExeFile);
}
}
int main(int argc, char* argv[])
{
ShowProcess();
return 0;
}
以上是全部代码。
yuruibo123
2007-08-24
打赏
举报
回复
顶!
yuruibo123
2007-08-24
打赏
举报
回复
用CreateToolhelp32Snapshot时,要得到所有进程的全路径仍然要用函数GetModuleFileNameEx,而 条件是不允许使用这个函数。继续求助!
linuxpgy
2007-08-24
打赏
举报
回复
CreateToolhelp32Snapshot 试过没有?
jun_01
2007-08-23
打赏
举报
回复
开个玩笑,不用GetModuleFileNameEx是不是可以用GetModuleFileName。
yuruibo123
2007-08-23
打赏
举报
回复
还有其它方法没?
KeSummer
2007-08-23
打赏
举报
回复
也可以不写驱动程序,直接读进程内的数据,进程启动参数是存放在低端的2GB内存的,参看VCKBASE上的获得其他进程参数的文章.
yuruibo123
2007-08-23
打赏
举报
回复
KeSummer([IN]LPVOID YourLove,[OUT]LPVOID MyLove),谢谢,您说的方法,我暂时还用不上,不过非常感谢。
yuruibo123
2007-08-23
打赏
举报
回复
jun_01(找兼职及各种合作),可以用GetModuleFileName,但用GetModuleFileName能得到所有的进程全路径么?我不会用,请指点。
龙凤呈祥焱
2007-08-23
打赏
举报
回复
楼上太难为楼主了,楼主连一个API都不想调用怎么还会去写驱动呢??
KeSummer
2007-08-23
打赏
举报
回复
完全可以,甚至可以不用任何API.
在驱动程序入口获得PsActiveProcess链(这个可以用PsGetCurrentProcess或者ntoskrnl的导出变量)
然后遍沥这条链表,获得每个进程的EPROCESS,在这个结构体里保存着PEB,而在PEB里保存了ProcessParameters的地址。ProcessParameters保存着进程的完整路径。当然PEB里保存了镜像加载列表,还可以顺便把程序加载的DLL一起列出来.
GetProcessFullPath.zip_64
进程
GetProcessImage
File
Name可以在xp和win732位和64位都能
获取
进程
路径
,Get
Module
File
NameEx
只能
获取
32位
进程
路径
但GetProcessImage
File
Name
获取
的
路径
都是包含设备名的
路径
,因此我们还要转换成一下,因此我们最终的GetProcessFullPath函数这样的
获取
进程
全
路径
方法
(支持xp、win7、win10系统)
获取
进程
全
路径
方法
(支持xp、win7、win10系统)
获取
进程
的
全
路径
的函数包括Get
Module
File
NameEx
、GetProcessImage
File
Name、QueryFullProcessImageName。这三个函数的原型:DWORD Get
Module
File
NameEx
(HANDLE hProcess,H
MODULE
h
Module
,LPTSTR lp
File
name,DWOR...
Get
Module
File
NameEx
遍历
获取
64bit程序
路径
失败的一种解决
方法
(Win7-64-bit)
问题: 32位程序在64位系统上调用Get
Module
File
NameEx
()遍历
获取
64位
进程
的
全
路径
失败,得到的
路径
都为空。 根据官方的说法: For the best results use the following table to convert paths. Windows 2000 = Get
Module
File
NameEx
() W
Windows 中通过
进程
ID
获取
可执行文件
路径
的
方法
Windows中通过
进程
ID
获取
进程
全
路径
Get
Module
File
NameEx
在Win7上,如果32
进程
调用用来
获取
64位
进程
路径
,返回失败。 由于函数Get
Module
File
Name() 和 函数Get
Module
File
NameEx
()都是通过PEB头信息
获取
进程
文件
路径
,所以它们只能工作于与调用
进程
相同位数的
进程
,比如:调用
进程
32位时,这两个函数只对32位
进程
有效,64位同理。 GetProcessImage
File
Name 所以在64位
进程
与32位
进程
并.
[Win32]
获取
进程
完整
路径
上两篇中,我们讲到了ToolHelp API,Process API和提升Debug权限,这一篇中来说说如何
获取
进程
的程序
路径
。
获取
进程
路径
其实有很多
方法
。
方法
1。使用ToolHelp API枚举模块,其中,
Module
32First得到一个
MODULE
ENTRY32 结构,结构中有一个szExePath成员,这个成员代表这个
进程
第一个模块的
路径
,也就是
进程
的
路径
(32位程序只能
获取
3
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章