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

    每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构。

  对内核对象的操作,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函数:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值