神马是内核对象
内核对象有非常多的种类,例如:事件对象、文件对象、文件内存映射对象、互斥量对象等等。这些对象是由操作系统去管理的。
内核对象通常都会被多个进程共用。系统为了记录内核对象的引用情况,于是有了内核对象的引用计数。通过计数就能知道内核对象是否被访问使用。
由于内核对象是共用的,为它们设立安全描述信息就显得很有必要了。因为要记录它是属于谁的、那些组属的可以访问、哪些被禁止访问。一般是谁创建它,内核对象就属于谁。
每个进程都有一个内核句柄表,这个句柄表记录了本进程创建的或者继承的句柄,如下面的图
通过句柄我们能够定位到内存的内核对象。而这里的句柄是跟线程相关的,句柄的值通常是索引值的4倍值。由于句柄是线程相关的,所以进程的句柄不能传递给另外的进程访问。因为传递的是个索引值,而这个索引值在其它的进程有可能对应别的内核对象。
因为进程内的句柄是线程相关的,那么是不是进程间就无法传递内核对象了呢?
答案是有办法,但是肯定不是简单的传递内核对象句柄。
这里提供了三种方法进程内核对象共享
-
使用对象句柄继承
这个方法只使用与父进程创建子进程过程中的句柄传递。系统会在父进程创建子进程的时候把父进程 句柄表中设置了继承属性的句柄完完整整的复制一份到子进程。上面图中的四个项都完全相同。这样 父子进程中传递的句柄值就能够正确访问相同的内核对象了。
-
为对象命名
使用这种方法不要求父子进程的情景。可以使用与任何进程之间。关键在于给内核对象设定了一个 名字,这个名字将作为对象的索引。但是系统没有保证这个名字唯一的机制。所以命名什么的要独特一点。
-
复制对象句柄
这种方法是三个进程的游戏。把A的某个内核对象拷贝到B中要C来完成。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。