码迷,mamicode.com
首页 > Windows程序 > 详细

windows核心编程第三章

时间:2016-05-12 12:20:22      阅读:184      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!