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

近来看了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,Security,null,attributes)