TC官方合作论坛
标题:
进程.打开和进程.获取进程句柄得到的句柄不同?
[打印本页]
作者:
贪吃蛇
时间:
2014-3-29 16:10
标题:
进程.打开和进程.获取进程句柄得到的句柄不同?
本帖最后由 贪吃蛇 于 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
你得到的是伪句柄.
应该是GetCurrentProcess()得到的,它和实句柄的区别在于使用简单,不需要CloseHandle去关闭,不会造成内存泄露
通常我们可以认为系统中的对象分成两类,一种称为系统对象,一种称为用户对象,比如进程对象,线程对象,文件映射之类的都属于用户对象,用于标示用户对象的句柄是系统唯一的
而核心对象则不一样.核心对象是为了加强系统的稳定性,因此,核心对象句柄是进程相关的,在每一个进程中都有一个核心对象表,每一个对象的索引(不完全是)作为类和对象的句柄,从而实现进程相关.同一个对象在不同的进程中可能有不同的索引,即句柄.对核心对象进行操作时,系统还要进行安全检验,看一下你是否有权来操作这个对象.因此你不能同用户对象一样,直接把句柄拿来玩
作者:
歪不歪
时间:
2014-3-29 20:56
哇,回答的好标准...崇拜超自然
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1