您的位置:程序门 -> vc/mfc -> 进程/线程/dll



不用getmodulefilenameex获取所有进程全路径的方法


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


不用getmodulefilenameex获取所有进程全路径的方法[已结贴,结贴人:yuruibo123]
发表于:2007-08-23 11:23:38 楼主
我想获取所有的进程路径,我已经掌握了openprocess,getmodulefilenameex那种方法,但是现在不允许调用getmodulefilenameex这个函数,请问还有没有别的方法获取所有进程的全路径?
发表于:2007-08-23 11:46:551楼 得分:0
开个玩笑,不用getmodulefilenameex是不是可以用getmodulefilename。
发表于:2007-08-23 14:00:292楼 得分:2
完全可以,甚至可以不用任何api.
在驱动程序入口获得psactiveprocess链(这个可以用psgetcurrentprocess或者ntoskrnl的导出变量)
然后遍沥这条链表,获得每个进程的eprocess,在这个结构体里保存着peb,而在peb里保存了processparameters的地址。processparameters保存着进程的完整路径。当然peb里保存了镜像加载列表,还可以顺便把程序加载的dll一起列出来.
发表于:2007-08-23 14:17:023楼 得分:0
楼上太难为楼主了,楼主连一个api都不想调用怎么还会去写驱动呢??
发表于:2007-08-23 14:40:324楼 得分:0
jun_01(找兼职及各种合作),可以用getmodulefilename,但用getmodulefilename能得到所有的进程全路径么?我不会用,请指点。
发表于:2007-08-23 14:42:085楼 得分:0
kesummer([in]lpvoid   yourlove,[out]lpvoid   mylove),谢谢,您说的方法,我暂时还用不上,不过非常感谢。
发表于:2007-08-23 14:53:576楼 得分:0
也可以不写驱动程序,直接读进程内的数据,进程启动参数是存放在低端的2gb内存的,参看vckbase上的获得其他进程参数的文章.
发表于:2007-08-23 17:20:017楼 得分:0
还有其它方法没?
发表于:2007-08-24 08:12:368楼 得分:0
顶!
发表于:2007-08-24 13:43:479楼 得分:0
createtoolhelp32snapshot     试过没有?
发表于:2007-08-24 14:54:4010楼 得分:0
用createtoolhelp32snapshot时,要得到所有进程的全路径仍然要用函数getmodulefilenameex,而   条件是不允许使用这个函数。继续求助!
发表于:2007-08-25 03:18:1311楼 得分:14
#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;
}

以上是全部代码。
发表于:2007-08-25 09:40:1312楼 得分:2
用   ntqueryinformationprocess,   第二个参数用   processimagefilename   就可以了,返回的buffer是unicode_string。

为什么不允许用   getmodulefilenameex?
发表于:2007-08-25 09:47:2213楼 得分:0
放着getmodulefilename这么容易的方法不用?
发表于:2007-08-26 22:52:2614楼 得分:0
谢谢大家的关注,我明天试试。
发表于:2007-08-26 23:08:5215楼 得分:2
用getcommandline,然后解析也可以,但要用代码注入到各个进程中,反而不如getmodulehandle好用。
发表于:2007-08-27 10:48:1916楼 得分:0
按照linuxpgy(永远)的方法解决了   ,feimingbiao()   的方法我还没试,不过非常感谢大家!


快速检索

最新资讯
热门点击