您的位置:首页 > 编程语言

windows核心编程之内核对象

2015-07-18 16:34 232 查看
由于不是计算机科班出身,一直对于进程和线程没有深入的了解,现开始看windows核心编程,将具体内容整理一下,以加深印象。

1、内核对象,即操作系统维护的一个数据结构,内部维护该对象的各种数据信息,常见的内核对象有:用于创建进程的进程内核对象,用于创建线程的线程内核对象,创建文件的文件内核对象,用于多线程互斥和同步的互斥对象、信标对象和事件对象等。在windows操作系统中,只有系统本身可以修改内核对象,应用层的代码无法修改,如果应用层想要获取该内核对象或者使用该内核对象应该怎么办呢?windows系统提供了各种API函数供使用,具体的API函数稍后总结。

2、内核对象的属性

(1)内核对象的使用计数器

第一部分已经讲到内核对象是由系统内核来拥有而不是由进程拥有,因此假设一个进程调用windows的API创建了一个内核对象,但是在进程终止运行之前并没有撤销该对象,则该内核对象可能还存在,因为可能其他进程在使用该内核对象,那么问题来了,应该如何知道该内核对象由多少进程使用呢?答案是内核对象维护的使用计数器,当内核对象第一个由一个进程创建时,该内核对象的使用计数器记为1,如果有其他的进程访问该内核对象,内核对象的使用计数器加1,当该进程结束,使用计数器减1,如果内核发现该内核对象的使用计数器减为0,则撤销该对象,否则一直存在。

(2)安全性

在调用windows的API创建内核对象时,每一个API都会有 一个指向S E C U R I T Y _ AT T R I B U T E S结构体的指针,该结构体即保存了内核对象安全性的设置,一般在应用程序中设为NULL,使用默认的安全设置即可。另外区分内核对象和普通的用户对象的一个标志就是看在创建该对象的API中有没有安全属性设置。

3、内核对象的操作

对于内核对象的操作包括内核对象的创建和内核对象的关闭

(1)创建内核对象

windows操作系统创建内核对象的方式为调用Create*()函数,如创建线程内核对象即调用CreateThread函数,创建进程内核函数即调用CreateProcess函数,这些函数返回一个句柄,并保存在进程句柄表中,作为内核对象的索引。

(2)关闭内核对象

当内核对象使用完成之后或者在进程终止运行之前需调用closeHandle()关闭该内核对象,但注意该内核对象并不一定会销毁,因为,内核对象的使用计数器并不一定为0.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: