TC官方合作论坛

 找回密码
 立即注册
查看: 1096|回复: 2

[已解决] 进程.打开和进程.获取进程句柄得到的句柄不同?

[复制链接]
发表于 2014-3-29 16:10:24 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 贪吃蛇 于 2014-3-29 16:24 编辑

用 进程.打开 的普通模式得到进程句柄0=540,
用 进程.打开 的超级模式得到进程句柄1=652,
用 进程.获取进程句柄 得到刚打开程序的进程句柄2=656,
为什么得到的句柄值不一样?
用 进程.关闭进程 测试,只有进程句柄2有效,是否就说明用 进程.打开 得到的进程句柄是错的,用 进程.打开 能得到正确的句柄吗?
   
    进程句柄0=进程.打开("D:\\Downloads\\UltraISO 9.5.5.2960.exe")
    辅助.等待(500)
    调试输出("进程句柄0="&进程句柄1)
   
    进程句柄1=进程.打开("D:\\Downloads\\UltraISO 9.5.5.2960.exe",1)//652
    辅助.等待(500)
    调试输出("进程句柄1="&进程句柄1)
   
    进程句柄2=进程.获取进程句柄("UltraISO")
    辅助.等待(500)
    调试输出("进程句柄2="&进程句柄2)
   
    进程.关闭进程(进程句柄2)

换了个程序测试还是句柄值仍然是540、652、656,也是只有656能关闭,进程句柄是按什么规则分配的,哪位大大能扫下盲不。
回复

使用道具 举报

发表于 2014-3-29 17:15:25 | 显示全部楼层
你得到的是伪句柄.
应该是GetCurrentProcess()得到的,它和实句柄的区别在于使用简单,不需要CloseHandle去关闭,不会造成内存泄露
通常我们可以认为系统中的对象分成两类,一种称为系统对象,一种称为用户对象,比如进程对象,线程对象,文件映射之类的都属于用户对象,用于标示用户对象的句柄是系统唯一的
而核心对象则不一样.核心对象是为了加强系统的稳定性,因此,核心对象句柄是进程相关的,在每一个进程中都有一个核心对象表,每一个对象的索引(不完全是)作为类和对象的句柄,从而实现进程相关.同一个对象在不同的进程中可能有不同的索引,即句柄.对核心对象进行操作时,系统还要进行安全检验,看一下你是否有权来操作这个对象.因此你不能同用户对象一样,直接把句柄拿来玩
回复 支持 反对

使用道具 举报

发表于 2014-3-29 20:56:49 | 显示全部楼层
哇,回答的好标准...崇拜超自然
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-28 13:11 , Processed in 0.034329 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表