WINDOWS核心编程之什么是内核对象(一)

原创 2007年09月16日 10:11:00

近来看了WINDOWS核心编程一书,看的挺过瘾(当然不会就去撞墙,回来再看,呵呵). 为了大家能更快的去了解其中的内容,特写此学习笔记供大家参考。

注:本文章可以转载, 标明出处就可以啦


在学习c++的时候,老师就讲类啊,对象,三大特性什么的,搞的我的头都大了,但你回想起来,也就那么回事,一捅就破的问题。这不又出了个内核对象,你说烦不烦人,呵呵,慢慢来你就会明白的。

1.什么是内核对象
我们在vc里面用到的菜单,窗口,字体,刷新等, 这些对象属于用户对象或GDI对象
内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息.

Q:既然只能内核访问这些内核对象,那么我们的应用程序如何才能操作这些内核对象呢?
A:windows提供了一组函数, 以便用定义得很好的方法来对这些对象的数据结构进行操作.
比如当调用一个用于创建内核对象的函数时,该函数就返回一个用标识该对象的句柄。我们进程中的任何线程都可以使用这个值 。将这个句柄传递给windows的各个函数,这样,系统就能知道你想操作哪个内核对象了。

我要喊注意啦::如果我们的进程调用了一个创建内核对象的函数,然后我们的进程终止运行,内核对象不一定被撤消。因为内核对象由内核所拥有,而不是某个进程所拥有的.

既然叫对象我们就会想到成员函数,成员变量,内核对象也不例外,它也有大量的成员, 但大多数数据成员属于特定的对象类型。有些数据成员(如安全性描述符,使用计数等)在所有对象类型中是相同的

2,内核对象的安全性
创建内核对象的函数都有一个指向SECURITY_ATTRIBUTES结构的指针作为参数.
比如

HANDLE CreateFileMapping(HANDLE hFIle,

                                               PSECURITY_ATTRIBUTES psa,

                                               DWORD flprotect,

                                               DWORD dwMaxmumSizeHigh,

                                               DWORD dwMaximumSizeLow,

                                                 PCTSTR pszName)
PSECURITY_ATTRIBUTES psa  这个参数就是,如果这个参数为NULL,那么就创建默认安全性的内核对象


默认安全性的内核对象:说明对象的管理小组的任何成员和对象的创建者都拥有对该对象的全部访问权,而其它所有人均无权访问该对象.

如果要限制人们对我们创建的内核对象的访问,必须对SECURITY_ATTRIBUTES结构初始化,把些结构的地址传给psa 就可以了
例如:
SECURITY_ATTRIBUTES sa;
Sa.nLength = sizeof(sa);
Sa.lpSecurityDescriptor =NULL;
Sa.bInheritHandle = FALSE;
HANDEL hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, &sa, PAGE_READWRITE, 0, 1024, “MyFIleMapping”);

如果想要对相应的一个内核对象进行访问, 必须设定执行什么样的操作,
例如:想要访问一个现有的文件映射内核对象, 应调用OpenfileMapping函数
HANDLE hFIleMapping = OpenFIleMapping(FILE_MAP_READ, FALSE, “MyFileMapping”);


Q:.如何确定一个对象是否属于内核对象
A:看创建该对象所用的函数, 创建内核对象的所有函数都有一个用来设定安全属性的参数(PAECURITY_ATTRIBUTES);,


3.内核对象的计数
每一个内核对都包含有一个使用计数, 一个对象刚被创建时,它的使用计数置为1.当另一个进程访问一个现有的内核对象时, 使用计数就递增1.当进程终止运行时,内核就自动确定此进程仍然打开的所有内核对象的使用计数. 如果计数为0, 内核就撤消该对象, 确保了在没有进程引用此对象时系统中不保留任何内核对象.

今天就说这么多吧, 这是我在csdn的第一篇作品,有说的不正确的地方,还请大家给予指证 (待续) 

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Windows-核心编程-03-什么是内核对象

什么是”内核对象”  作为 Windows  软件开发人员,你经常都要创建、打开和处理内核对象。系统会创建和处理 几种类型的内核对象,比如访问令牌对象、事件(event)对象、文件对象、文件映射 对...

Windows核心编程之内核对象

在Windows操作系统中我们常常接触的有三种对象类型: Windows内核对象 (事件对象,文件对象,进程对象,I/O完成端口对象,互斥量对象,线程对象等等):由执行体(Excutive)对象管...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

windows核心编程(三) 内核对象

(1)什么是内核对象 每个内核对象都只是一块内存块,它由操作系统内核分配,并只能由操作系统内核访问。内存块是一个数据结构,其成员维护着与对象的相关信息。少数的成员(安全描述符和使用计数)是所有内核对象...

windows核心编程--内核对象

Windows核心编程 第3章 内核对象 摘自:http://www.cnblogs.com/xi52qian/archive/2011/02/28/1967510.html3.1 什么是内核对象内核...

《Windows核心编程》——三 内核对象

前言 内核对象用于管理进程、线程和文件等诸多种类的大量资源。 3.1 何为内核对象 内核对象包括访问令牌对象、事件对象、文件对象、文件映像对象、I/O完成端口对象、作业对象、邮件槽对象、互斥量对象、...

内核对象 《Windows核心编程》

每个内核对象都只是一个内存块,它又操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员维护着与对象相关的信息。少数成员(安全描述符和使用计数)是所有对象都有的,但其他大多数成员...

Windows核心编程(三)内核对象

1、内核对象: 通过API来创建,每个内核对象是一个数据结构,对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员(如安全描述符和使用计数)是所有对象都有的,但其他大...

Windows核心编程003-内核对象

Windows核心编程:第三章 内核对象 3.1 何为内核对象   ->内核对象包括:访问令牌(access token)对象,事件对象,文件对象,文件映射对象,                .....

Windows核心编程:内核对象

作者:shenzi 链接:http://hi.csdn.net/shenzi Windows核心编程:内核对象  1.对象和句柄     对象是静态定义的对象类型的单个运行时实...

Windows 核心编程之6 线程内核对象

线程内核对象
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)