上一篇写了关于windows进程内核对象的博文,但是写得实在是乱,而且似乎想以C++对象想法来说明内核对象的概念,反而适得其反,没讲清楚,却弄复杂了。今天重新来理解下windows内核对象。摘录《windows内核编程》的一些文字

   windows内核对象是内核分配的一个内存块,只能被运行在内核模式下的代码访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。有些数据成员在所有对象类型中是相同的,例如使用计数等。但是大多数数据成员属于特定的对象类型。内核对象的记录的的数据在整个系统中只有一份,所以内核对象也是系统资源。

    内核对象数据成员#使用计数:

         使用计数即是统计有多少个进程正在使用该内核,使用计数内核对象类型常用的数据成员之一。

         内核对象由内核所有,不是进程所有。所有当进程调用创建内核对象的函数,当该进程终止运行,通常情况下内核对象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象时,内核做的就是在另一个进程停止使用该对象前不要撤消,所以内核对象的生存期可以比创建该对象的进程长。

          内核知道有多少进程正在使用某个内核对象,因为当内核对象被创建的时候,其使用计数初始化为1,当另一个进程访问一个现有的内核对象时,其使用计数为增加1。当使用该内核对象的进程终止时,使用计数就会减1,当使用计数减到0时,内核对象就会被内核撤消。

     内核对象数据成员#安全性:

         内核对象能够得到安全描述符的保护。安全描述符用于描述谁创建了内核对象,谁能够访问和使用内核对象,谁无权访问。在创建进程函数CreateProcess函数中LPSECURITES_ATTRIBUTES  lpProcessAttributes参数即是对进程安全属性的描述,一般都使用NULL,设置为默认安全属性。如果想要限制别的进程对你的进程创建的内核对象的访问,必须创建安全描述符。对LPSECURITY_ATTRIBUTES结构进行初始化。(具体请参考

 

     以上是内核对象类型普通数据成员。 

 posted on 2012-02-27 22:28  mfslog  阅读(388)  评论(0编辑  收藏  举报