内核对象之二 “内核对象句柄表”

上一篇 / 下一篇  2008-11-14 21:10:12 / 个人分类:Windows编程相关

 

       我们知道,指向内核对象的句柄是进程局部的,所以,进程必然有一个数据结构维护着指向所有他用的到的内核对象的句柄,这种数据结构称为‘进程内核对象句柄表’,每一个进程在创建的时候系统就会为他分配一个内核对象句柄表,当然此时,句柄表为空。

       我们想像一下,此时一个新的进程A诞生了,于是他有了一个空的进程句柄表,我们假定以后的操作都是在这个进程A发起的。于是某个时刻,他创建了一个内核对象B(比如一个新的进程),操作系统就会给这个新的内核对象分配一块内存以保存内核对象,并将它的地址放在A进程的句柄表的第一个可用记录项中(在此时第一个记录项,因为A进程句柄表在此前为空),并返回一个在A句柄表中的索引值(此处是0),这个索引值就是我们可以在可以使用的指向内核对象B的句柄。所以,所谓的句柄只是一个索引值,也就是偏移量,这也说明了为什么句柄是进程局部的原因。

       另外需要注意的就是,并不是所有的创建内核对象的函数在创建失败的时候都返回0,有的也会返回-1,所以,用的时候最好查一下MSDN.


TAG: Windows编程相关

 

评分:0

我来说两句

Open Toolbar