Windows核心编程入门:5 什么是内核对象,什么是用户对象

6316 人浏览 | 时间: 2016-05-14 23:56:09 | 作者: codexia 会员文章,禁止转载
    在《Windows核心编程入门3:轻松理解用户态和内核态》中,我已经详细的描述了用户态和内核态的区别。有了这个基础,相信后面的文章理解起来会容易的多。如果你还没有看,一定要先去看哦。
    要理解内核对象和用户对象,我们先搞清楚什么是对象。
    我们学过C++,我们知道C++有对象,这是面向对象思想的一个特点。在面向对象思想中,一切都是对象。所以,我们知道了对象的一些基本特征。对象是思想的一个产物,在计算机中,你是没法找到一个个叫做对象的东西的。在内存中,所有的东西都是内存块。不管你是对象,还是非对象,还是外星人,还是空气,全都是内存块,或者是一个位,或者是一个字节,或者是一大块连续的内存块,或者是多个不连续的内存块形成的一个结构。不管表现为哪样,都是一个吊样,那就是内存块。
    站在编程的角度来讲,我们通常理解的对象一般是面向对象语言的对象。对象是类实例化得到的。所以,提到对象,你可能会想起类。类是一种类型,类实例化实际上就是定义一个变量而已。结构体是类的始祖,类算得上是结构体。我们一般不会在结构体中写成员函数,结构体中只有数据,一般是在C语言的写法。(感谢【卡尔卢】的矫正),矫正原文:【"类继承于结构体,所以结构体也是类"的说法是错误的。一方面类并没有继承结构体,另一方面,即便类继承了结构体,在面向对象的说法中,也只能说类也是结构体,而不能说结构体是类。 "一般在结构体中不写成员函数",这只是编程习惯。结构体与类的区别仅仅是默认访问控制权限的不同,结构体中不写成员函数的做法是c习惯的做法。】附加说明:【我提到的继承,算是思想上的,相当于是借鉴。表达不准确,很感谢卡尔卢指正。至于说结构体和类的关系的说法,就看站在什么角度去看了。我们可以说类是特殊的结构体,因为多了成员函数和访问权限控制,也可以说,结构体是特殊的类,因为少了成员函数和完全的访问权限。哪一种说法都可以。不过继承的表述确实不准确,产生了歧义。欢迎各位指正,相互学习。】
    从内存角度来看,结构体和类都是定义一块内存的组织形式而已。成员函数也不过就是一个函数地址罢了。
    所以,在Windows中,我们提到的对象,很多都是泛化的概念。也就是说,Windows中将结构体定义的对象称为一个对象,但是这个对象和我们C++语言定义的对象是有一些差别的。
    我特别说到这一点,是因为基本上开始学习Windows的人,经常会被对象这个词语迷惑。也不知道以上的解释能不能给你解开疑惑,如果还有疑惑,可以在文章底部留言(C++技术网首发,我会收到邮件提醒,会第一时间回复)。
    知道了Windows中的对象的概念,那我们继续来分辨内核对象和用户对象的含义。
    内核态是系统内核程序运行时的状态,可以无所不能,而用户态程序只能执行普通的指令,访问有限的资源。自然而然,内核对象就是内核空间的对象,用户对象就是用户空间的对象。所谓的空间,也就是内存段
开通会员付1C币>>阅读全文
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0

相关阅读