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核心编程第三章内核对象的一点细节

久仰此书大名已久,可惜以前没看懂。。。现在感觉有点基础了回头再看,感觉多少有点死皮赖脸的嫌疑。。。。关于啥是内核对象请看第三章就对了,看的时候发现书上说GetCurrentProcess返回的是伪句柄...

Windows核心编程(三)内核对象

1、内核对象: 通过API来创建,每个内核对象是一个数据结构,对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员(如安全描述符和使用计数)是所有对象都有的,但其他大...

windows核心编程<读书笔记三>内核对象

【文起】蟹儿的爱一直伴随着,奋斗! 内核对象 1、  定义: 内核对象可以供系统和应用程序使用来管理各种各样的资源,比如线程、进程、文件等。 内核对象就是内核分配的一个内存块,且只能由该内核来...

windows核心编程--内核对象和句柄泄漏

1. 什么是内核对象?        内核对象是操作系统分配的一个内存块,该内存块是一个数据结构,用于管理对象的各种信息。 当应用程序要与系统设备进行交互的时候,将使用到内核对象,出于安全...

《windows核心编程系列》三谈谈内核对象及句柄的本质

http://blog.csdn.net/ithzhang/article/details/7920204                           ...

Windows核心编程:内核对象

作者:shenzi 链接:http://hi.csdn.net/shenzi Windows核心编程:内核对象  1.对象和句柄     对象是静态定义的对象类型的单个运行时实...

读书笔记----《windows核心编程》第三章 内核对象1(句柄与安全性)

最近一直没有更新博客,因为一直在想一个问题,内核对象这一章内容很多很重要,自己没有掌握好也没有把握写好这一章,最后还是决定能写多少写多少,一面写一面学,后续学到新的再更新吧;   《windows核心...

关于Windows核心编程中的内核对象

对内核对象的理解。 何为内核对象:              访问令牌对象,事件对象,文件对象,文件映射对象,I/O 完成端口对象,作业对象,邮件槽(mailslot)对象,互斥量对象(mutex...

windows核心编程第三章学习事件内核对象代码

本文是看书时调试

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

注:源码为学习《Windows核心编程》的一些尝试,非原创。若能有助于一二访客,幸甚。 1.程序框架 /* * 文件:Handshake.cpp * 时间:2013-07-10 * 描述:学...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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