TCP IP技术与Windows系统中句柄机制详解.pdfVIP

  • 0
  • 0
  • 约1.21千字
  • 约 5页
  • 2026-01-28 发布于山西
  • 举报

TCP IP技术与Windows系统中句柄机制详解.pdf

▪从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句

柄。

▪Windows系统中有许多内核对象(这里的对象不完全等价于“面

向对象程序设计”一词中的“对象”,但实质上差不多),比如

打开的文件,创建的线程,程序的窗口,等等。这些重要的对象

肯定不是4个字节或者8个字节足以完全描述的,他们拥有大量

的属性。为了保存这样一个对象的状态,往往需要上百甚至上

千字节的内存空间,那么怎么在程序间或程序的子过程

(函数)之间传递这些数据呢?这成百上千的字节拷贝来拷

贝去吗?显然会浪费效率。那么?

▪当然传递这些对象的首地址(通过指针)是一个办法,

但这至少有两个缺点:

✓了内核对象本身,使得程序(而不是操作系统内核)

也可以任意地修改对象地状态,这显然是操作系统

内核所不允许的;

✓操作系统有定期整理内存的责任,如果一些内存整理过

一次后,对象被搬走了?

▪Windows操作系统就采用进一步的间接:在进程的地址

空间中设一张表,表里头专门保存一些编号和由这个编

号对应一个地址,而由那个地址去实际的对象,这

个编号跟那个地址在数值上没有任何规律性的联系,纯

粹是个映射而已。

▪在Windows系统中,这个编号就叫做句柄。

▪Handle本身是一个32位的无符号整数,它用来代表一个内核对

象,但它并不指向实际的内核对象,用户模式下的程序不可

能获得一个内核对象的实际地址。

▪那么Handle的意义何在?它实际上是索引在一个表中查

找对应的内核对象的实际地址。

▪那么这个表在哪里呢?每个进程都有这样的一个表,叫句柄表。

该表的第一项就是进程自己的句柄,这也是为什么你调用

GetCurrentProcess()总是返回0x7FFFFFFF。

▪简单地说,Handle就是一种用来间接代表一个内核对象的整数

值。你可以在程序中使用handle来代表你想要操作的内核对象。

这里的内核对象包括:(Event)、线程、进程、Mutex等

等。我们最常见的就是文件句柄(filehandle)。

▪另外要注意的是,Handle仅在其所属的进程中才有意义。将一个

进程拥有的handle传给另一个进程没有任何意义。

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档