Windows句柄的理解

在Windows中,内核对象的数据结构只能由操作系统访问,应用程序不能在内存中定位这些数据结构并更改其内容。因为这个限制,Windows提供了一组接口函数以恰当的方式来访问这些内核对象的数据结构,句柄的概念由此产生。

当调用了一个会创建内核对象的函数后,函数会返回一个句柄,标识所创建的对象,这个句柄可供进程里面的所有线程使用。在进程初始化的时候,系统会为它分配一个句柄表,句柄表里面的结构通常包含一个内核对象的指针、一个访问掩码和一些标志,而句柄的用处就是在句柄表里面找到对应的内核对象的数据结构。系统用索引的方式来表示内核对象的信息保存在进程句柄表中的具体位置,而这个索引值index=句柄值/4;所以一般都会发现句柄值是4的倍数。当获得了索引值之后,就可以从句柄表里面找到对应的指向内核对象的指针,Windows就是通过这样会让应用程序可以访问到内核对象的。

当说到这里的时候,很多关于句柄的疑问就可以解释的通了。通常来说CreateProcess和OpenProcess来以相同的条件打开同个应用程序,所 获得的句柄值是不一样的,但是他们都是在访问同一个内核对象,因为索引得到的句柄表项里面的内核对象的指针指向的对象是一样的。因此在使用closehandle(handle)来释放句柄的时候,其实是在句柄表里面删除相关索引项,该内核对象的引用计数-1。因此句柄的赋值拷贝并不影响内核对象的引用计数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值