您的位置:首页 > 编程语言

windows核心编程第三章--内核对象

2010-08-21 00:02 302 查看
每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构。

对内核对象的操作,Wi n d o w s提供了一组函数来对这些结构进行操作。这些内核对象始终都可以通过这些函数进行访问。

当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,你的进程中的任何线程都可以使用这个值。将这个句柄传递给Wi n d o w s的各个函数,这样,系统就能知道你想操作哪个内核对象。
内核对象由内核所拥有,而不是由进程所拥有。必须记住的是,内核对象的存在时间可以比创建该对象的进程长。
当一个进程被初始化时,系统要为它分配一个句柄表。该句柄表只用于内核对象,不用于用户对象或G D I对象。句柄表只是个数据结构的数组。每个结构都包含一个指向内核对象的指针、一个访问屏蔽和一些标志。当进程初次被初始化时,它的句柄表是空的。然后,当进程中的线程调用创建内核对象的函数时,比如C r e a t e F i l e M a p p i n g,内核就为该对象分配一个内存块,并对它初始化。这时,内核对进程的句柄表进行扫描,找出一个空项。由于句柄表是空的,内核便找到索引1位置上的结构并对它进行初始化。该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,各个标志也作了设置. 最后,无论怎样创建内核对象,都要向系统指明将通过调用C l o s e H a n d l e来结束对该对象的操作。
跨越进程边界共享内核对象

第一个方法:对象句柄的继承性

只有当进程具有父子关系时,才能使用对象句柄的继承性。
请记住,虽然内核对象句柄具有继承性,但是内核对象本身不具备继承性。

第二个方法:对象命名

共享跨越进程边界的内核对象的第二种方法是给对象命名。许多(虽然不是全部)内核对象都是可以命名的。
第三个方法:复制句柄
共享跨越进程边界的内核对象的最后一个方法是使用D u p l i c a t e H a n d l e函数:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: