内核对象

内核对象的理解

定义:
内核对象是由操作系统(以下称OS)创建并管理的系统资源(内存块),允许应用程序
访问

内核对象的创建-释放过程描述:
1、每一个进程在初始化时,OS将为其分配一个句柄表(类似与消息队列),
   用于存放内核对象,而不存放用户对象,句柄表的结构(内核对象句柄、
   内核对象地址、访问屏蔽标志)
   内核对象与进程相关联而不是与应用程序相关联原因是:
   (1)不同的进程对内核对象的访问权限是不同的,有必要区分对待
   (2)如果句柄是全局的,则一个进程可以控制另外一个进程的句柄,
      破坏另外一个进程的句柄。

2、应用程序进程调用Create*,促使内核调用CreateSomething创建内核对象,
   内核调用该函数的时候内核就为该对象分配一个内存块(内核不是简单的去
   创建内核对象,而是首先检查当前内核是不是有该对象,有则该内核对象
   计数器加一,否则创建该内核对象,同时置计数器为1),并进行初始化,
   然后内核再扫描该进程的句柄表,初始化一条记录并放在该进程的句柄表中

3、进程使用内核对象必须从进程句柄表中找出内核对象句柄,然后才能使用

4、在不使用内核对象时,调用CloseHandle向操作系统声明结束对该对象的访问,
   并不是销毁此内核对象,为什么要声明呢?
   (1)调用CloseHandle时,OS并不是销毁此内核对象
   (2)OS做的是从进程的句柄表中删除该内核对象的记录;另外再考察该内核对
      象的使用计数以决定是否需要释放该对象
5、同时OS自动将内核对象计数器减一,当内核对象计数器为0时,内核自动销毁
   此对象

参考资料:
http://www.cublog.cn/u/12723/showart.php?id=65686

原文地址:https://www.cnblogs.com/kuailewangzi1212/p/623772.html