3.1.1 内核对象的使用计数
内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建
内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对
象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内核知道,在另
一个进程停止使用该对象前不要撤消该对象,必须记住的是,内核对象的存在时间可以比创建
该对象的进程长。
内核知道有多少进程正在使用某个内核对象,因为每个对象包含一个使用计数。使用计数
是所有内核对象类型常用的数据成员之一。当一个对象刚刚创建时,它的使用计数被置为1。
然后,当另一个进程访问一个现有的内核对象时,使用计数就递增1。当进程终止运行时,内
核就自动确定该进程仍然打开的所有内核对象的使用计数。如果内核对象的使用计数降为0,
内核就撤消该对象。这样可以确保在没有进程引用该对象时系统中不保留任何内核对象。
内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建
内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对
象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内核知道,在另
一个进程停止使用该对象前不要撤消该对象,必须记住的是,内核对象的存在时间可以比创建
该对象的进程长。
内核知道有多少进程正在使用某个内核对象,因为每个对象包含一个使用计数。使用计数
是所有内核对象类型常用的数据成员之一。当一个对象刚刚创建时,它的使用计数被置为1。
然后,当另一个进程访问一个现有的内核对象时,使用计数就递增1。当进程终止运行时,内
核就自动确定该进程仍然打开的所有内核对象的使用计数。如果内核对象的使用计数降为0,
内核就撤消该对象。这样可以确保在没有进程引用该对象时系统中不保留任何内核对象。