非提问文档,顺便送分.20分*5
句柄标识一个内核对象。每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存
块是一种数据结构,它的成员负责维护该对象的各种信息。内核对象由内核所拥有而不是由进程所拥
有。内核对象的存在时间可以比创建该对象的进程长。如果你的进程终止,内核对象不一定被撤消。
在大多数情况下对象确实被撤消,但如果另一个进程正在使用你的进程创建的内核对象,那么内核
知道,在另一个进程停止使用该对象前不要撤消该对象。内核知道某个内核对象有几个进程在使用,
因为每个对象包含一个使用计数。使用计数是所有内核对象常用的数据成员之一。
菜单,窗口,鼠标光标,刷子,字体等这些对象属于用户对象或图形设备接口对象而不是内核对象。
若要确定一个对象是否属于内核要素对象,最容易的方法是观察创建该对象所用的函数有没有用来设
定安全属性信息的参数。
当一个进程被初始化时,系统要为它分配一个句柄表(空的)。该句柄表只用于内核对象(而不用于用
户对象和gdi对象)。句柄表是一个数据结构的数组,每个结构都包含一个指向内核对象的指针,一个
访问屏蔽(DWORD)和一个标志(DWORD)。当进程中的线程调用创建内核对象的函数(比如
CreatFileMapping)时,内核就为该对象分配一个内存块并对它初始化。同时对进程的句柄表进行
扫描,找出一个空项,填充内核对象数据结构的内存地址到该顶的指针成员,设置访问屏蔽和标志。
用于创建内核对象的所有函数均返回与进程相关的句柄。该句柄实际上是放入进程的句柄表中的索引
(由此可知,句柄是与进程相关的,不能由其他进程直接成功地使用)。但这只适用部分系统,句柄的
含义可能随时变更。
应用程序在运行时有可能泄漏内核对象,但是当进程终止时系统将能确保所有内容均被正确地清除。
这个情况也适用于所有对象,资源和内存块,也就是说当进程终止运行时,系统将保证进程不会留
下任何对象。