Windows程序进程中内核对象句柄表
来源:互联网 发布:四叠半神话大系 知乎 编辑:程序博客网 时间:2024/05/29 19:33
转自:点击打开链接
一个进程在初始化时,系统将为它分配一个句柄表。这个句柄表仅供内核对象使用,不适用于用户对象或GDI对象。
创建
一个进程首次初始化的时候,其句柄表为空。当进程内的一个线程调用一个会创建内核对象的函数时,内核将为这个对象分配并初始化一个内存块。然后,内核扫描进程的句柄表,查找一个空白的记录项,并对其进行初始化。具体就是指针成员会被设置成内核对象的数据结构的内部内存地址,访问掩码会被设置成拥有完全访问权限,标志也会设置。
用于创建内核对象的任何函数都会返回一个与进程相关的句柄,这个句柄可由同一个进程中运行的所有线程使用。系统用索引来表示内核对象的信息保存在进程句柄表中的具体位置,要得到实际的索引值,句柄值应该右移两位。
调用一个函数时,如果它接受一个内核对象句柄作为参数,就必须把Create*函数返回的值传给它。在内部,这个函数会查找进程的句柄表,获得目标内核对象的地址,然后以一种恰当的方式来操纵对象的数据结构。
关闭
无论以什么方式创建内核对象,我们都要调用CloseHandle向系统表明我们已经结束使用对象,如下所示:
BOOL CloseHandle(HANDLE hobject);
这样会让内核对象的使用计数-1。一旦调用CloseHandle,我们的进程句柄表中对应的记录项就会被清除,即使这个内核对象还没有被销毁,我们也不能再访问那个内核对象了。
如果忘记调用CloseHandle,不一定会发生对象泄漏。在进程运行期间,进程可能发生资源泄漏的情况,但是当进程终止时,操作系统会确保此进程所使用的所有资源都被释放,因为进程终止时,系统自动扫描该进程的句柄表。这适用于所有的内核对象、资源(包括GDI对象在内)以及内存块。
- Windows程序进程中内核对象句柄表
- Windows进程内核对象句柄表
- 进程的内核对象句柄表
- 进程的内核对象句柄表
- -进程的内核对象句柄表
- 进程的内核对象句柄表
- 3.2 进程的内核对象句柄表
- 内核对象句柄表
- 内核对象句柄表
- windows进程句柄表
- windows进程句柄表
- windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
- windows笔记-跨越进程边界共享内核对象【复制对象句柄】
- windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
- windows笔记-跨越进程边界共享内核对象【复制对象句柄】
- windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
- windows笔记-跨越进程边界共享内核对象【复制对象句柄】
- 进程共享内核对象之 复制内核对象句柄
- JavaWeb-数据库
- 安装 sql server 2005 时 提示 “SQL server服务无法启动”解决方案
- 经典排序算法 – 插入排序Insertion sort
- Android消息推送机制
- 项目经理责任
- Windows程序进程中内核对象句柄表
- JavaWeb-JDBC
- 最好的10本适用于初学者阅读的javaScript和jQuery书籍
- 转SQL习题
- 每日一题(18) - 寻找发帖水王
- getchar()、getch()、getche()的区别
- RobHess的SIFT源码分析:综述
- fsck修复受损的文件系统
- android 四种常用的存储方式