枚举模块时出了点问题,自动运行了!

pcblackwolf 2008-04-09 01:17:02
为枚举窗口而调用API函数CreateProcess,NULL,addr @szLPath,NULL,NULL,FALSE,0,NULL,NULL,addr @stSI,addr @stPI时,@szLPath作为命令行参数我又不得不通过枚举模块来获取指定PID的路径
LOCAL @dwProcessID:dword
LOCAL @hProcess:dword
LOCAL @hModule
LOCAL @cbNeedid
LOCAL @szLPath[1024]:byte
LOCAL @szSPath[256]:byte
;------获取命令行参数[指定进程ID的路径]----------------------
invoke SendMessage,hWinListPID,LB_GETCURSEL,0,0
inc eax
.if eax
dec eax
invoke SendMessage,hWinListPID,LB_GETITEMDATA,eax,0
mov @dwProcessID,eax
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,@dwProcessID ;打开指定ID进程取得进程句柄
.if eax
mov @hProcess,eax
invoke EnumProcessModules,@hProcess,addr @hModule,sizeof @hModule,addr @cbNeedid ;枚举进程模块
invoke GetModuleFileNameEx,@hProcess,@hModule,addr @szLPath,sizeof @szLPath ;获取长路径
; invoke GetShortPathName,addr @szLPath,addr @szSPath,sizeof @szSPath ;获取短路径
.endif
invoke CloseHandle,@hProcess
invoke CloseHandle,@hModule
.endif
在这@szSPatht和@szLPath应该没多大区别吧,都可以得到路径名,不过会通过路径自动运行这个进程[就像是在CMD里输入了@szSPatht再敲回车],程序就无法再运行下去,在网上也查了,不管是VB还是VC都差不多,能给看看是什么原因吗?或者说有另一种不用获得指定PID路径的方式?
...全文
118 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
pcblackwolf 2008-04-09
  • 打赏
  • 举报
回复
因为只为了得到路径,不用列出所出模块,也就没用Module32First()/Module32Next()
invoke CreateProcess,NULL,addr @szLPath,NULL,NULL,FALSE,0,NULL,NULL,addr @stSI,addr @stPI
.if eax
invoke CloseHandle,@stPI.hThread
invoke CloseHandle,@stPI.hProcess ;释放内存资源
push @stPI.dwProcessId
pop @stEP.dwProcID
.while !@stEP.hWinMain
invoke GetTickCount
.while eax<10000
invoke EnumWindows,offset _EnumWinProc,addr @stEP ;枚举窗口
.if @stEP.hWinMain== NULL
invoke Sleep,20
.endif
.endw
.endw
.endif
在CreateProcess后我就结束进程了,如果把dwCreationFlag设为CREATE_SUSPENDED 线程结束了,还会在内存中一直挂着,用CloseHandle似乎无法结束
这里是不是
invoke GetTickCount
.while eax<10000
出问题了,我不太懂得GetTickCount函数,我要用来做时间限制,应该怎么使用,能给我解释一下吗?

zara 2008-04-09
  • 打赏
  • 举报
回复
哪个 API 函数引发的自动运行? CreateProcess() 是正常的吧, 本来就是这个功能嘛. 如果不需要运行的话, 可以试试 CREATE_SUSPENDED 的 dwCreationFlag, 不再需要时, TerminateProcess() 函数终止. 如果是下面的些其它的函数引发的话, 确实是奇怪了点儿.
进程, 模块等的枚举, 也可以试试 Process32First()/Process32Next(), Module32First()/Module32Next() 这类函数吧.

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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