内核对象与用户对象/GDI对象

一、内核对象

     1.可以理解为操作系统使用和管理的控制块,例如嵌入式操作系统里的任务控制块,邮箱控制块等。

     2.内核对象中有少数的静态成员(全局可见)。

     3.只有通过调用windows api 才能使用内核对象。

     4.内核对象的作用域是基于进程的,这样做处于安全和健壮型考虑。

     5.内核对象有一个静态成员用来计数,当内核对象被创建时计数值为1,如果有其他进程访问此内核对象(通过特殊的进程共享内核对象的方式)则计数值加1,进程结束,计数值减1,如果计数为0,则系统内核会释放此内核对象。

     6.创建内核对象时需要指定内核对象的安全级别。

     7.每个进程都有一个内核对象的列表,列表由内存块指针,访问掩码,和一些标志位组成。

     8.内核对象的创建:在进程的内核对象列表中,找到一个空白位置,创建内核对象,句柄值/4(后两位windows系统用)就是内核对象在列表中的索引。所以说内核对象的句柄不是对象的首地址,只是内核对象在内核对象列表中的索引值。

       

     9.内核对象的关闭:计数值减1,如果为0,则释放对象。

    

二、用户对象/GDI对象   

     用户创建的对象,用户具有使用权。

 

三、进程间共享内核对象有以下三种方式:

     1.继承对象句柄,首先要在创建对象时在参数安全结构体(SECURITY_ATTIBUTES)中指明句柄是可继承的。

        当指明对象的句柄是可继承时,那么在进程的内核对象列表中,标志位中关于可继承的位就会被置1.

        那么在父进程创建子进程的时候,子进程就会继承父进程内核列表中所有的可继承的句柄,只继承一次。

        但是子进程无法通过某种手段获知自己继承了哪些内核对象句柄,只能从程序文档中获知。

 

     2.继承有名字的对象

        如果进程A创建了一个名字“good”的内核对象,进程B可以创建相同类型相同名字的对象,那么就会有访问权了。

        也可以直接open特定名字的内核对象。

   

      3.还有一种方式是复制一个进程的内核对象列表DupilateHandle,很少用。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值