15:23:54 内核对象
内核对象是一个内存块,有操作系统分配,这个内存块是一个数据结构,存放着对象的相关信息。
用于创建内核对象的所有函数几乎都有一个指向一个SECURITY_ATTRIBUTES结构的指针
进程内核对象句柄表
一个进程初始化时,系统会为他分配一个句柄表,刚开始为空,当第一个线程创建一个内核对象时,内核为这个对象分配并初始化一个内存块。然后扫描进程句柄表,查找一个空白记录项,将指针赋值为内核对象的内存地址。
索引 | 指向内核对象的指针 | 访问掩码 | 标志 |
1 |
|
|
|
2 |
|
|
|
从上可以看出,可以通过索引来获得内核对象的指针。要得到索引值,应该用句柄值除以4。由于句柄值实际是作为进程句柄表的索引来使用的,所以其他进程无法使用。
关闭内核对象
closeHandle(HANDLE Hobject)
跨进程共享内核对象:
1、对象句柄继承
只有句柄可以继承,对象本身是不能继承的。只有进程之间是父子关系才可以实现句柄继承。
设置方式如下:
此时系统会遍历父进程的句柄表,将可以继承的句柄复制到子进程的句柄表中。系统会递增内核对象的使用计数。为了销毁对象,父子进程都必须调用closeHandle来关闭内核对象。
2、复制对象句柄
DumplicateHandle();
http://baike.baidu.com/view/1285868.htm
END
2010-09-02 15:24:01