- 0
- 0
- 约1.21千字
- 约 5页
- 2026-01-28 发布于山西
- 举报
▪从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句
柄。
▪Windows系统中有许多内核对象(这里的对象不完全等价于“面
向对象程序设计”一词中的“对象”,但实质上差不多),比如
打开的文件,创建的线程,程序的窗口,等等。这些重要的对象
肯定不是4个字节或者8个字节足以完全描述的,他们拥有大量
的属性。为了保存这样一个对象的状态,往往需要上百甚至上
千字节的内存空间,那么怎么在程序间或程序的子过程
(函数)之间传递这些数据呢?这成百上千的字节拷贝来拷
贝去吗?显然会浪费效率。那么?
▪当然传递这些对象的首地址(通过指针)是一个办法,
但这至少有两个缺点:
✓了内核对象本身,使得程序(而不是操作系统内核)
也可以任意地修改对象地状态,这显然是操作系统
内核所不允许的;
✓操作系统有定期整理内存的责任,如果一些内存整理过
一次后,对象被搬走了?
▪Windows操作系统就采用进一步的间接:在进程的地址
空间中设一张表,表里头专门保存一些编号和由这个编
号对应一个地址,而由那个地址去实际的对象,这
个编号跟那个地址在数值上没有任何规律性的联系,纯
粹是个映射而已。
▪在Windows系统中,这个编号就叫做句柄。
▪Handle本身是一个32位的无符号整数,它用来代表一个内核对
象,但它并不指向实际的内核对象,用户模式下的程序不可
能获得一个内核对象的实际地址。
▪那么Handle的意义何在?它实际上是索引在一个表中查
找对应的内核对象的实际地址。
▪那么这个表在哪里呢?每个进程都有这样的一个表,叫句柄表。
该表的第一项就是进程自己的句柄,这也是为什么你调用
GetCurrentProcess()总是返回0x7FFFFFFF。
▪简单地说,Handle就是一种用来间接代表一个内核对象的整数
值。你可以在程序中使用handle来代表你想要操作的内核对象。
这里的内核对象包括:(Event)、线程、进程、Mutex等
等。我们最常见的就是文件句柄(filehandle)。
▪另外要注意的是,Handle仅在其所属的进程中才有意义。将一个
进程拥有的handle传给另一个进程没有任何意义。
您可能关注的文档
- 国网湖南电科院油分析实验室场地改造技术书.pdf
- TCP IP技术中句柄概念与应用.pptx
- 珠穆朗玛峰攀登史重要回顾.pdf
- 女歌手演员转型历程及代表作简介.pdf
- 内存分配策略:基于首次适配算法动态数据写入与管理.pdf
- 2021家具设计师岗位技能标准.docx
- 2026年人教版四年级下学期数学第一单元测试卷(含答案和解析) (2).docx
- 2026年人教版四年级下学期数学第一单元测试卷(含答案和解析) (3).docx
- 2026年人教版四年级下学期数学第一单元测试卷(含答案和解析) (1).docx
- 2026年人教版四年级下学期数学第一单元测试卷(含答案和解析).docx
- 能源开采行业市场前景及投资研究报告:国内用电结构,电力需求增长引擎.pdf
- 人工智能行业市场前景及投资研究报告:具身智能产业发展,软硬件迭代加速,人形机器人规模突破.pdf
- 三峡旅游-市场前景及投资研究报告-省际游轮业务,迎接成长新纪元.pdf
- 通信行业2026年投资策略分析报告:算力升维,星座织网.pdf
- 水泥行业市场前景及投资研究报告:优质现金流资产,反内卷趋势,盈利改善预期.pdf
- 兴福电子-市场前景及投资研究报告-湿电子化学品龙头,受益存储需求提升.pdf
- 医药生物行业市场前景及投资研究报告:设备招投标,设备拐点向上趋势,医疗科技蓬勃发展.pdf
- 长芯博创-市场前景及投资研究报告-光电互连综合提供商,谷歌算力扩容受益.pdf
- 中国汽研-市场前景及投资研究报告-中国汽车标准做大做强.pdf
- 智谱-市场前景及投资研究报告-深耕AI大模型领域,各场景落地,拓展业务边界.pdf
原创力文档

文档评论(0)