首页 > Windows开发 > 详细

windows核心编程第三章

时间:2016-05-12 12:17:37      阅读:193      评论:0      收藏:0      [点我收藏+]

3.1.1  内核对象的使用计数

内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内核知道,在另一个进程停止使用该对象前不要撤消该对象,必须记住的是,内核对象的存在时间可以比创建该对象的进程长。


3.2.1 创建内核对象

如果调用一个函数创建内核对象,但是调用失败了,那么返回的句柄值通常是0(N U L L)。不过有少数函数在运行失败时返回的句柄值是-1(I N VA L I D H A N D L E VA L U E)。例如,C r e a t e F i l e,所以在返回值验证是否成功的时候需要注意


3.2.2 关闭内核对象

假如忘记调用C l o s e H a n d l e函数,那么会不会出现内存泄漏呢?答案是可能的,但是也不一定。在进程运行时,进程有可能泄漏资源(如内核对象)。但是,当进程终止运行时,操作系统能够确保该进程使用的任何资源或全部资源均被释放,这是有保证的。对于内核对象来说,系统将执行下列操作:当进程终止运行时,系统会自动扫描进程的句柄表。如果该表拥有任何无效项目(即在终止进程运行前没有关闭的对象),系统将关闭这些对象句柄。如果这些对象中的任何对象的使用计数降为0,那么内核便撤消该对象。



windows核心编程第三章

原文:http://blog.csdn.net/miyunhong/article/details/51371674

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!