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核心编程-9.用内核对象进行线程同步

9.1 等待函数 9.2 等待成功所引起的副作用 9.3 事件内核对象 9.4 可等待的计时器内核对象 9.5 信号量内核对象 9.6 互斥量内核对象 9.7 线程...

Windows核心编程学习八:事件内核对象

注:源码为学习《Windows核心编程》的一些尝试,非原创。若能有助于一二访客,幸甚。 1.程序框架 /* * 文件:Handshake.cpp * 时间:2013-07-10 * 描述:学...

Windows核心编程 第九章 线程与内核对象的同步(下)

Windows核心编程 第九章 线程与内核对象的同步(下)

windows核心编程系列学习记录3——内核对象

内核对象

FW:《windows核心编程》学习笔记(一)内核对象

Link:http://www.winu.cn/space-14160-do-blog-id-28428.html 1.内核对象:     1).符号对象     2).事件对象  ...

内核对象 《Windows核心编程》

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

Windows核心编程 第3章 内核对象

3.1 什么是内核对象内核对象就是内核中的一块内存,是一个结构,并且只能由内核对象访问,应用程序只能通过调用Windows提供的函数来操作内核对象。每个内核对象都有相同的部分比如安全属性和使用计数器。...

Windows核心编程之3 内核对象

3 内核对象 3.1 哪些是Windows的内核对象 3.1.1 使用计数 3.1.2 内核对象的安全性 3.2 进程内核对象句柄表 3.3 跨进程边界共享内核对象...

windows核心编程--内核对象

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

WINDOWS核心编程--读书笔记:第三章 内核对象

      一、系统中的内核对象有:比如存取符号对象、 事件对象、文件对象、文件映射对象、I / O 完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程对象和等待计 时器对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOWS核心编程之什么是内核对象(一)
举报原因:
原因补充:

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