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

原创 2004年07月06日 20:48:00

2004年7月6日   20点20分

 

书接上回

 

1.进程的内核对象句柄表

当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,每个结构都包含一个指向内核对象的指针,一个访问屏蔽和一些标志.

 

句柄表如图如示

索引

内核对象内存块的指针

访问屏蔽(标志位的DWORD)

标志

1

0x????????

0x????????

0x????????

2

0x????????

0x????????

0x????????

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

当进程第一次被初始化时,它的句柄表是空的,当进程中的线程调用创建内核对象的函数时,内核就为该对象分配一个内存块,并对它初始化。初始化的过程是,内核对进程的句柄表扫描,找一个空项。然后初始化内核对象内存块的指针,访问屏蔽,标志。

 

2.创建内核对象

创建内核对象的函数例如

HANDLE CreateThread(…..)

HANDLE CreateFile(……)

HANDLE CreateFileMapping(……)

HANDLE CreateSemaphore(…….)

这些创建内核对象返回的句柄是放入进程的句柄表中的索引,其用于标识内核对象的信息存入的位置., win2000中返回的值用于标识放入进程的句柄表的该对象的字节数,而不是索引号.

 

3.关闭内核对象

BOOL CloseHandle(HANDLE hobj)

此函数首先检查调用进程的句柄表,以确保传递给经的索引用标识一个进程,如果该索引是有效的,那么系统就可以获得内核对象的数据结构的地址,计数等,它会清除进程的句柄表中的项,此时该句柄对你的进程就无效了。如果计数为0,该内核便从内存中撤消该内核对象,如果不为0,也会执行closeahandle操作,计数减1,标识着系统中还有别的进程对此对象进行访问,当其它进程停止使用该对象时(也就是也执行了closehandle操作),该对象将被撤消。

 

Q:如果没有调用CloseHandle函数, 会不会出现内存泄漏呢?

A:这是可能的,当进程终止运行了,系统会自动扫描进程的句柄表,如果在终止进程运行前没有关闭对象,系统将关闭这些对象句柄,如果对象的使用计数为0, 内核便撤消该对象,但如果不为0, 那么就会出现内存泄漏。

 

4.跨越进程边界共享内核对象

这就是说,在不同进程中运行的线程需要共享内核对象.

比如

1:文件映射  在同一台机器上运行的两个进程之间共享数据块

2.管道使得应用程序能够在连风的不同机器上运行的进程之间发送数据块

3.互斥对象,事件使得不同进程中的线程能够同步它们的连续运行,就像一个程序在完成某项任务时需要将情况通知另一个应用程序的情况相同.

 

前一断时间由于工作比较忙,没有来得及更新,请大家见谅

上面只简单的介绍的一些进程的相关知识,后续将详细介绍.(待续)

windows 内核对象

以前老是分不清内核对象,用户对象。最近研究了一下这2个对象的使用,特别是内核对象的使用。 在系统中,对象分两类:内核对象和用户对象。  内核对象:访问令牌对象,文件对象,文件映射对象,I/0完成端口对...
  • xiaoyafang123
  • xiaoyafang123
  • 2016-08-16 18:47:19
  • 632

LINUX 和 WINDOWS 内核的区别

[声明:欢迎转载,转载请注明出自CU ACCESSORY http://linux.chinaunix.net/bbs/thread-1153868-1-1.html]关于LINUX和WINDOWS的...
  • 21aspnet
  • 21aspnet
  • 2011-09-03 11:42:35
  • 9260

探究Windows内核你知多少

Windows内核      如上所述,现代操作系统的一个明显特征就是用户空间和系统空间的划分,从UNIX时代以来,人们一直把存在于系统空间的代码和数据的集合称为“内核(Kernel)”,因此内核是有...
  • broadview2006
  • broadview2006
  • 2009-05-12 15:38:00
  • 30008

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

2004年7月6日   20点20分 书接上回 1.进程的内核对象句柄表当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,...
  • carbon107
  • carbon107
  • 2004-07-06 20:48:00
  • 1446

Windows内核编程学习笔记

1.内核对象:内核对象的数据结构只能由内核访问,应用程序不能在内存中定位这些数据结构和直接改变它们的内容。(内核对象通过调用相应的Win32函数产生,并返回一个标识该对象的句柄,注:该句柄与进程相关。...
  • xingcen
  • xingcen
  • 2017-04-11 18:19:17
  • 104

《Windows核心编程》之“内核对象”

内核对象(Kernel Object)是Winodws操作系统中最核心的一个概念,本文将对整个抽象的概念进行一些探索。 一、什么事内核对象 1,内核对象是对操作系统各项资源的抽象。     Windo...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016-08-19 11:17:38
  • 722

Windows核心编程:内核对象

作者:shenzi链接:http://hi.csdn.net/shenziWindows核心编程:内核对象 1.对象和句柄    对象是静态定义的对象类型的单个运行时实例。对象类型包括系统定义的数...
  • shenzi
  • shenzi
  • 2009-09-19 20:36:00
  • 3723

WINDOWS内核对象

WINDOWS内核对象 一.前言 Windows中有很多像进程对象、线程对象、文件对象等等这样的对象,我们称之为Windows内核对象。内核对象是系统地址空间中的一个内存块,由系统创建并维护。内核对象...
  • misterliwei
  • misterliwei
  • 2006-07-25 23:08:00
  • 15173

<em>windows</em>核心<em>编程</em>源码.rar

<em>windows</em>核心<em>编程</em>源码第1章 对程序错误的处理 1 1.1 定义自己的错误代码 4 1...nicode与ANSI之间转换字符串 23 第3章 <em>内核</em>对象 27 3.1 <em>什么是内核</em>对象 27 3.1...
  • 2018年04月17日 00:00

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

1.进程的内核对象句柄表当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,每个结构都包含一个指向内核对象的指针,一个访问屏...
  • benny5609
  • benny5609
  • 2007-09-16 10:14:00
  • 602
收藏助手
不良信息举报
您举报文章:WINDOWS核心编程之什么是内核对象(二)
举报原因:
原因补充:

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