在开发Windows应用程序的时候,往往需要访问或者创建一些内核资源(例如:创建进程、线程),这时候我们往往会遇到句柄(Handle)这个抽象概念。句...
2025-10-01 1
在开发Windows应用程序的时候,往往需要访问或者创建一些内核资源(例如:创建进程、线程),这时候我们往往会遇到句柄(Handle)这个抽象概念。句柄(Handle)是很多时候,是用来唯一标识一些重要的内核资源,例如:进程、线程的PCB/TCB信息。对于一些简单的RTOS系统,有时候没有Handle的概念,往往会直接向开发者返回PCB/TCB的指针(也就是PCB/TCB所在的内存地址),由于内存地址的唯一性,所以指针也可以唯一的标识进程或线程的PCB/TCB信息。
那问题来了,既然指针已经可以很好的标识这些内核数据信息了,为什么还需要句柄呢?简单的回答是:Handle是基于安全性的考虑。因为一旦开发者或黑客知道了某些内核资源的内存地址,他就可以试图扫描这一区域的内存空间,从中获取一些敏感信息,例如:进程、线程的名称,运行时间,所处的运行状态等。
当然,现代操作系统(例如:Linux、Windows)中像PCB/TCB都保存在内核态的内存空间中,与运行在用户态上的普通程序,即使知道了PCB/TCB的内核内存地址,也无法直接访问,似乎我们不用担心这些内核内存地址的泄露,但不要忘了,开发者和黑客还可以开发运行在内核态的驱动程序,通过驱动程序,就可以扫描泄露出来的内核内存地址了。
所以,为了安全的考虑,现代操作系统往往会对包换PCB/TCB的指针(内核地址),做一个一一对应的转换,这个转换值就是Handle。这样一方面给用户态的开发者,间接访问、控制内核资源的能力,同时又避免了内核态中,关键内存地址的泄露。
简单来说,句柄(handle)就是操作系统资源的“编号”或“门票”。你无法直接接触资源本体——例如窗口、文件或线程——但可以通过句柄间接地对它们进行操作。
在 Windows 编程中,句柄并不能被指针替代。尽管在底层它们看起来都只是 32 位或 64 位的数值,但二者的含义和用途完全不同。
句柄本质上是一个“黑盒子”。你无法得知它内部究竟是什么——可能是一个索引、某种编码后的数据,甚至可能是一个指针——但这些实现细节完全属于 Windows 内部机制,程序员无法通过句柄直接窥探任何内核信息。
总结来说:出于安全性以及多方面的考虑,句柄是你与操作系统资源之间的“桥梁”。它不是资源本身,而是系统提供给你的唯一合法通行证。
最后,如果你想体验一下计算机底层知识的魅力,也可以看看阿布的《CPU眼里的C/C++》,深度感受 C/C++ 是如何撑起整个计算机系统的。⚙️
相关文章
在开发Windows应用程序的时候,往往需要访问或者创建一些内核资源(例如:创建进程、线程),这时候我们往往会遇到句柄(Handle)这个抽象概念。句...
2025-10-01 1
9月30日,界面新闻获悉,智元机器人全国首家开放式具身智能体验中心在江苏无锡开业。据智元官方介绍,这是首个面向C端消费者开放的具身智能文旅融合项目。...
2025-10-01 1
来源:人民日报vivo印尼工厂内,工人在进行手机零部件外观检查。本报记者 曹师韵摄近年来,中国手机品牌凭借价格、技术与渠道等综合优势,在印度尼西亚赢得...
2025-10-01 1
观点网讯:9月30日,锦富技术宣布已与上大通用智能机器人研究院、上海函司信息科技有限公司正式签署合作协议,三方将聚焦宇树科技智能机器人产品的行业应用解...
2025-10-01 1
美国总统特朗普于本周二签署行政命令,指示政府投资5000万美元,用于推动人工智能在儿童癌症研究领域的应用。此次举措的重要性在于,虽然联邦机构普遍加大了...
2025-10-01 1
川观新闻记者 唐泽文 发自深圳9月30日,荣耀阿尔法全球旗舰店在深圳开业。这是其第二家全球旗舰店。第一家于去年5月落地成都。为什么名字里有个“阿尔法”...
2025-10-01 1
您好:这款游戏可以开挂,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到-人的牌一样。所以很多小伙伴就怀疑这...
2025-10-01 6
财联社9月30日电,云计算服务商CoreWeave宣布与Meta价值140亿美元的订单协议有效期将持续至2031年12月14日。...
2025-10-01 1
发表评论