如何修改一个进程的映像名称?

moncat 2004-08-23 11:10:28
本人在做一个项目时,遇到一个问题,就是---如题
因为一台机器上运行多个同一程序,所以想将每个程序作一个不同的映像名称来区别,不知能否实现,请高手指点
...全文
1421 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tabris17 2004-10-27
  • 打赏
  • 举报
回复
那只有修改EPROCESS了,就是麻烦了一点,先要进ring0啊
nwpulipeng 2004-10-03
  • 打赏
  • 举报
回复
呵呵,帮顶混分
moncat 2004-10-02
  • 打赏
  • 举报
回复
to tabris17(四不象) :
看不明白啊,那具体我应该怎么修改映像名称呢?才能使任务管理那里显示修改后的名称?
tabris17 2004-08-25
  • 打赏
  • 举报
回复
还有,改文件名的话是不可行的


见下面的描述:

Q:
windows下创建进程有一个奇怪的现象,如果有个process1.exe文件,我运行它,在“任务管理器”里就可以看到process1.exe,然后结束进程,该process1.exe的文件名为“process2.exe”,再次运行,会发现在“任务管理器”里显示的名字仍是process1.exe,我称它为“残象”。


个人猜测是进程结束后,系统并没有销毁该进程的EPROCESS结构,而是残留在系统中,再次运行该程序时又使用了旧的EPROCESS结构

A:
这与EPROCESS没关系,你中途运行其他程序后再运行改名的exe,虽然EPROCESS
不同,但文件名仍一样。它会重新填充。但填充受已经读入的文件映像缓存影响。
若你改名后将exe文件用hex编辑器打开,随便写点完全一样的内容,保存,缓存刷新,
重运行你就可以看到变化了。

tabris17 2004-08-25
  • 打赏
  • 举报
回复
进程的映像名称是存放在EPROCESS结构中的

EPROCESSS结构在kernel memory,用户模式下不能随意访问


但是可以修改进程的PEB结构中的LoaderData结构指向的InLoadOrderModuleList来修改进程EXE模块的Module Filename



你可以参考下面的文章<<通过 PEB 改变进程名,实现“穿透”防火墙>>


http://20cn.net/~tabris17/article/p025.html
UDX协议 2004-08-24
  • 打赏
  • 举报
回复
简单的方法是,做个小程序,改名为exe1,exe2,...exe100.然后分别启动。
DentistryDoctor 2004-08-24
  • 打赏
  • 举报
回复
映像名称不是那么容易更改的,否则所有用WINDOWS的人都得骂娘了。
可以在程序中创建具名内核对象进行区别。
moncat 2004-08-24
  • 打赏
  • 举报
回复
因为我的程序是通过快捷方式启动的,启动时都有一个唯一的参数,如果要重命名再运行就麻烦很多了,听说什么DDK中关于rootkey的什么进程链可以做到,有哪位高手知道,救救我啊。。。
oyljerry 2004-08-24
  • 打赏
  • 举报
回复
用互斥判断是否重名,然后更改名字,用ShellExecute()启动
kugou123 2004-08-24
  • 打赏
  • 举报
回复
可以用CreateMutex建立一个互斥量,然后用GetLastError进行判断,如果返回ERROR_ALREADY_EXISTS,则表面该程序已经在运行了。然后可以调用CopyFile("a.exe","a1.exe",FALSE);如果原来名字为a.exe,则建立一个叫a1.exe的程序,和以前一样,再CreateProcess运行它。
holyeagle 2004-08-24
  • 打赏
  • 举报
回复
也可以如楼上说,在程序起来的时候,通过进程名先判断是否有相同的程序开启,如果有,复制一个新的程序,用shellexe开启,然后自己退出。
holyeagle 2004-08-24
  • 打赏
  • 举报
回复
可能和EProcess有关,查查这方面的资料

15,471

社区成员

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

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