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

原创 2007年09月16日 10:14:00
1.进程的内核对象句柄表
当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,每个结构都包含一个指向内核对象的指针,一个访问屏蔽和一些标志.
 
句柄表如图如示
索引
内核对象内存块的指针
访问屏蔽(标志位的DWORD)
标志
1
0x????????
0x????????
0x????????
2
0x????????
0x????????
0x????????
 
当进程第一次被初始化时,它的句柄表是空的,当进程中的线程调用创建内核对象的函数时,内核就为该对象分配一个内存块,并对它初始化。初始化的过程是,内核对进程的句柄表扫描,找一个空项。然后初始化内核对象内存块的指针,访问屏蔽,标志。
 
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核心编程学习八:事件内核对象

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

windows核心编程-事件内核对象

在所有的内核对象中,事件内核对象是个最基本的对象。事件能够通知一个操作已经完成。 事件内核对象的组成 一个使用计数(与所有内核对象一样), 一个用于指明该事件是个自动重置的事件还是一...

Windows核心编程——》第三章 内核对象

1.什么是内核对象 内核对象是由内核分配的一块内存,它只能被内核访问。 这块内存存储着一个保存着内核对象信息的数据结构。 2.如何访问内核对象 应用程序不能直接访问内核对象,只能通...

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

内核对象

内核对象 《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 什么是内核对象内核...

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

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

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

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

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