根据进程HANDLE获取进程对应的文件名?

猎人66 2001-06-22 03:36:00
我已知某一进程的HANDLE,想获取此进程相应的文件名,我记得好像应该用GetModuleFileName,却不知怎么不行(我在NT下试的,不知9x可否?)
...全文
302 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sw0324 2001-06-25
  • 打赏
  • 举报
回复
gz
猎人66 2001-06-25
  • 打赏
  • 举报
回复
谢谢!!!我明白你的意思!但我并不是想获取进程的所有MODULE对应的文件名,而是此进程对应的文件名!
应该用GetModuleFileNameEx(h,NULL,buf,sizeof(buf));
但效果不理想,有些进程不行,不能像NT的任务管理器一样!
jazzrabbit 2001-06-24
  • 打赏
  • 举报
回复
源码写如下罢:

HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,hProc[i]);//按昭你上面的源码接下写

HMODULE hModules[256];
DWORD cbNeeded=0;
EnumProcessModules(
h, // handle to process
&hModules, // array of module handles
sizeof(hModules), // size of array
&cbNeeded // number of bytes required
);
TCHAR fn[_MAX_PATH];
for (int j=0;j<cbNeeded/sizeof(HMODULE);i++){
//打印出所有对应于h的文件名
GetModuleFileNameEx(h,hModules[j],fn,sizeof(fn));
TRACE0(fn);
//...
}
....
jazzrabbit 2001-06-24
  • 打赏
  • 举报
回复
你还没听懂我的意思.
openprocess返回的句柄会对应多个文件(module)的.
通过传入OpenProcess返回的句柄给EnumProcessModules
则会把对应于这个句柄的所有module句柄一一列出来(返回一个HMODULE数组),
对这个数组中的每一个hmodule用GetModuleFileNameEx返回其路径全名.

不知这样说能明白不...
猎人66 2001-06-24
  • 打赏
  • 举报
回复
up
猎人66 2001-06-24
  • 打赏
  • 举报
回复
up
jazzrabbit 2001-06-23
  • 打赏
  • 举报
回复
老弟,OpenProcess返回的是进程的句柄,不是模块句柄哦!
一个进程可以有多个模块构成,你应当用EnumProcessModules这个函数进一步枚举所有的模块.
对于每一个模块用GetModuleFileNameEx返回其模块名.
猎人66 2001-06-23
  • 打赏
  • 举报
回复
帮帮我吧
猎人66 2001-06-23
  • 打赏
  • 举报
回复
谢谢!
那怎么根据OpenProcess返回句柄获取它相应的文件名?
猎人66 2001-06-22
  • 打赏
  • 举报
回复
不会吧,你看看我的源码:
if(GetVersion()<0x80000000)
{
typedef BOOL (WINAPI *ENUMPROCESSES)(DWORD*,DWORD,LPDWORD);
ENUMPROCESSES EnumProcesses;
HMODULE hPsapi=LoadLibrary("PSAPI.DLL");
EnumProcesses=(ENUMPROCESSES)GetProcAddress(hPsapi,"EnumProcesses");
if(EnumProcesses)
{
DWORD hProc[100];
DWORD nb=0;
if(EnumProcesses(hProc,100*sizeof(DWORD),&nb))
{
nb=nb/sizeof(DWORD);
for(DWORD i=0;i<nb;i++)
{
TListItem* aItem=ListView1->Items->Add();
aItem->Caption=IntToStr(hProc[i]);
char buf[MAX_PATH+1];
HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,hProc[i]);
if(h)
{
int iLen=GetModuleFileName(h,buf,MAX_PATH);
buf[iLen]=0;//此处iLen总为0
}
CloseHandle(h);
}
}
}
}
LZLZ 2001-06-22
  • 打赏
  • 举报
回复
我试了一下,可以啊,很正常

15,471

社区成员

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

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