内核对象介绍

2019-07-14 13:04发布

一. 常见的内核对象
(1) 进程 & 线程 & 访问令牌 & 文件 & 文件映射 & I/O完成端口 & 邮槽 & 管道 & 互斥体 &
   信号量 & 事件 & 计时器 & 线程池 (2) 内核对象是跨进程的, <类似如全局变量> , 比如需要进行进程间的同步,数据共享 (3) 进程内核对象句柄表
    (3.1) 当一个进程初始化时,系统会为它分配一张内核对象句柄表。这个表只用于管理内核对象句柄。
         GDI和用户对象不会影响到这张表。表中的每一项有4个域。  即句柄ID,对象内存地址,访问屏蔽位,标志位。 (4) 每个内核对象都有一个引用计数, CloseHandle() 只有等这个内核对象的引用计数为<0>才会被销毁 (5) 每个对象在创建时都有一个安全属性 <可读 | 可写 | 对象的权限> (6) 每个内核对象都有一个安全描叙符 (7) 程序结束后也没有CloseHandle(), 创建的这个内核对象也不会被系统释放掉; (8) 内核都是由系统管理   二. 内核对象使用的流程 (1) 创建对象: CreateXXXXXXX() (2) 打开对象, 得到句柄<可以和第一步合在一起> (3) 通过API访问对象 (4) 关闭句柄 (5) 句柄全部关闭,对象自动销毁 三. 内核对象的跨进程访问:
(1) 访问别另一个内核对象的条件: 自己进程的句柄表中, 有一项指向要访问的对象   (2) 三种方式实现跨进程访问对象:
    (2.1) 父进程创建子进程时, 子进程会继承父进程的句柄表 <>
    (2.2) 通过对象名,ID标识
    (2.3) 使用DuplicateHandle() 将一个句柄从一个进程传递到另一个进程