Windows核心编程学习笔记 第一部分 第三章 内核对象

时间:2023-01-17 09:00:07

内核对象:是内核分配的一个内存块,并只能由内核进行访问。这个内存块是一种数据结构,数据结构的成员负责维护对象的各种信息。有的数据成员(如安全性描述符,使用计数等)在各种类型对象中都是相同的,但大叔数据成员只属于特定的内核对象。

系统和应用程序可以使用内核对象来管理各种资源。

内核对象的数据结构只能被内核访问,应用程序只能由MS公司提供的一组函数,用定义好的方法对结构进行操作。

内核对象的存在时间可以比创建该对象的进程长。内核对象由内核而不是进程所拥有。

 

内核对象句柄:当调用一个内核对象创建函数时,函数会返回一个标识所有创建对象的句柄。可以将这个句柄视为不透明值,进程中的所有线程都可以访问。

 

使用计数:用于指明多少进程正在使用这个内核对象,是所有内核对象类型常用的数据成员之一。

 

安全描述符:用于描述创建这个对象的进程,以及哪个进程可以访问或使用该对象,而哪个进程无权访问。几乎所有内核对象的函数都有一个参数,它是指向SECURITY_ATTRIBUTES结构的指针。

 

除了内核对象外,应用程序还可能用到其他类型的对象如菜单,窗口,字体。这些对象属于用户对象或GDI对象。其区分方法是观察创建这个对象所使用的函数是否有一个设定安全属性的参数。(创建内核对象的函数几乎都有)

HANDLE CreateFileMapping(

   HANDLE hFile,

   PSECURITY_ATTRIBUTES psa,

   DWORD flProtect,

   DWORD dwMaximumSizeHigh,

   DWORD dwMaximumSizeLow,

   PCTSTR pszName);

 

BOOL CloseHandle(HANDLE hobj)关闭内核对象。若使用完对象后忘记调用该函数可能导致内存泄漏。

 

待补充:

进程间内核对象的共享:

对象句柄的继承性

改变句柄标志

命名对象

终端服务器命名空间

复制对象句柄

 

内核对象的整体特性