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

yuruibo123 2007-08-23 11:23:38
我想获取所有的进程路径,我已经掌握了OpenProcess,GetModuleFileNameEx那种方法,但是现在不允许调用GetModuleFileNameEx这个函数,请问还有没有别的方法获取所有进程的全路径?
...全文
2321 16 打赏 收藏 转发到动态 举报
写回复
用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一起列出来.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧