暴急!!!高手们!!如何得到进程的真实句柄?

VCPPStudier 2005-08-08 03:05:22
现在我知道GetCurrentHandle()得到的是伪句柄,
现在我用DuplicateHandle()方法得到所谓的真实句柄:
HANDLE hProcess;
DuplicateHandel(
GetCurrentProcess(), //伪句柄对应的进程
GetCurrentProcess(), //进程的伪句柄
GetCurrentProcess(), //真实句柄对应的进程
&hProcess, //真实句柄
0,
FALSE,
DUPLICATE_SAME_ACCESS);

但是我得到的这个所谓的真实句柄的值在程序中显示的值是:0x00000078
但是用spy++查看此进程的ID却是:0x000007FC

这到底是怎么回事呢?高手们请帮帮忙啊!!!~
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nelsonc 2005-08-08
  • 打赏
  • 举报
回复
假设程序A是打开文件的;程序B是操作文件的。
A里面调用GetCurrentProcessID,把ID值存到共享数据段。
B里面调用OpenProcess(..., 程序A的ID),就可以拿到程序A的Handle。然后用这个Handle调用DuplicateHandle就可以了。

注意:OpenProcess一定要在程序B里调用,否则拿到的Handle无效。
VCPPStudier 2005-08-08
  • 打赏
  • 举报
回复
多谢楼上各位热心回复!~
我刚才研究了一下,其实我用DuplicateHandle()得到的句柄就是进程的真实句柄。

我遇到的问题的其实是这样的,大家耐心听好了:
我在同一个目录下放了两个.exe,一个DLL,两个程序都连接到同一个DLL上。
程序1打开后,用DLL里的代码CreateFile()创建一个文件,把创建的文件的handle放入DLL的共享变量段里;
程序2打开后,得到上面已存入的文件的handle,想把此handle复制使成为程序2自身可以用。(程序2有了复制的handle后可以操纵那创建的文件)
我CreateFile(),DuplicateHandle()的代码都是放在DLL里。
可是我为什么老是DuplicateHandle()会失败啊,真是奇怪!
guxingfeiyu 2005-08-08
  • 打赏
  • 举报
回复
DuplicateHandle()
Requirements:
Windows CE OS .NET 4.0 and later Winbase.h Windows.h Coredll.lib
真糨糊 2005-08-08
  • 打赏
  • 举报
回复
HANDLE GetCurrentProcess(VOID);
得到当前进程的伪句柄
dirdirdir3 2005-08-08
  • 打赏
  • 举报
回复
用EnumProcess得到ID再OpenProcess试试。
guxingfeiyu 2005-08-08
  • 打赏
  • 举报
回复
...............
GetCurrentProcessId()
VCPPStudier 2005-08-08
  • 打赏
  • 举报
回复
哦,我又研究了一下,spy++里得到的是进程的ID。
我现在的问题是,我在DLL想Duplicate某一个进程的handle,但总是失败。
VCPPStudier 2005-08-08
  • 打赏
  • 举报
回复
上面手误,spy++查看此进程handle显示是:0x000007FC

15,466

社区成员

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

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