首页
社区
课程
招聘
[旧帖] 何根据进程句柄取进程名 0.00雪花
发表于: 2013-5-31 15:48 8045

[旧帖] 何根据进程句柄取进程名 0.00雪花

2013-5-31 15:48
8045
记得以前有个人告诉过我,可以不通过枚举进程得到进程名,我首先运行GetWindowThreadProcessId获取进程标识,然后OpenProcess获取到进程句柄;然后通过另外一个API获取到进程名,但是这个进程名我忘记是什么了,谁知道吗?非枚举的方式。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
GetModuleFileNameEx
2013-5-31 15:55
0
雪    币: 173
活跃值: (807)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
.版本 2

GetWindowThreadProcessId (鼠标位置窗口句柄, 进程PID)
进程句柄 = OpenProcess (2035711, 0, 进程PID)
进程名 = 取空白文本 (255)
GetModuleFileNameEx (进程句柄, 0, 进程名, 256)
编辑框_获取信息.内容 = 进程名

但是获取的进程名是“?”号
2013-5-31 16:11
0
雪    币: 194
活跃值: (241)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
易语言??
2013-5-31 16:23
0
雪    币: 173
活跃值: (807)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
恩 是的 暂时没学会VC++
2013-5-31 16:34
0
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
6
GetWindowThreadProcessId获取的<进程PID>为0吧,你调试了吗..易语言下从dll引入GetWindowThreadProcessId时第二个参数虚设置为传址
2013-5-31 17:02
0
雪    币: 173
活跃值: (807)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
果然是,是我不够认真,我想请问参数设置为“传址”是什么意思?
有些参数比如GetModuleFileNameEx的第三个参数“文件名缓冲区”,同样是保存文本信息的,为什么它就不需要设置传址了?
2013-5-31 17:17
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
int CLibProcess::GetCurrentProcessID(string name){
        DWORD   aProcesses[1024],   cbNeeded,   cProcesses;   
        unsigned   int   i;   
        HANDLE   hProcess   =   NULL;   
        HMODULE   hMod   =   NULL;   
        char szProcessName[MAX_PATH]   =   "UnknownProcess ";     
        //   计算目前有多少进程,   aProcesses[]用来存放有效的进程PIDs   
        if(!EnumProcesses(aProcesses,sizeof(aProcesses), &cbNeeded)){   
                return 0;   
        }   
        cProcesses = cbNeeded / sizeof(DWORD);   
        //   按有效的PID遍历所有的进程   
        for( i = 0; i < cProcesses; i++){   
                //   打开特定PID的进程   
                hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, aProcesses[i]);   
                //   取得特定PID的进程名   
                if(hProcess){   
                        if(EnumProcessModules(hProcess,&hMod,sizeof(hMod),&cbNeeded)){   
                                GetModuleBaseName(hProcess,hMod,szProcessName,sizeof(szProcessName));   
                                //将取得的进程名与输入的进程名比较,如相同则返回进程PID   
                                if(!_stricmp(szProcessName,name.c_str())){   
                                        CloseHandle( hProcess);   
                                        return aProcesses[i];   
                                }   
                        }   
                }//end   of   if   (   hProcess   )   
        }//end   of   for   
        //没有找到相应的进程名,返回0   
        CloseHandle(hProcess);   
        return 0;   
}
2013-5-31 19:27
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我是个计算机语言小白。求求哪位老师教教我计算机语言。
2013-6-2 03:08
0
雪    币: 6
活跃值: (1282)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
自己下载书 慢慢看
2013-6-2 10:36
0
雪    币: 209
活跃值: (125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
计算机小白不应该来看雪,里面水太深,反而容易知难而退。
2013-6-6 13:47
0
雪    币: 173
活跃值: (807)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
小白又怎么了,就是看中看雪是个知识大熔炉的好地方。
2013-6-7 23:08
0
雪    币: 226
活跃值: (210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
函数原型:
DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
函数参数说明:
hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。
lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数
nSize DWORD ,装载到缓冲区lpFileName的最大值
2013-6-7 23:42
0
游客
登录 | 注册 方可回帖
返回
//